前言python
如何只單獨測試django中的某一個py文件呢?或者說如何書寫測試腳本?git
咱們能夠在任意一個py文件(應用下的tests或者本身新建一個)中書寫如下代碼:sql
建立一個電影表django
class Movie(models.Model): title = models.CharField(max_length=64) price = models.DecimalField(max_digits=8,decimal_places=2) publish_time = models.DateField() # 年月日 """ DateField() 裏面能夠設置兩個參數 auto_now:每次修改數據的時候,都會自動將最新的更新時間記錄下來 auto_now_add: 只在建立數據的時候將建立時間自動記錄下來,以後不會再改變 """ # publish_time = models.DateTimeField() # 年月日 時分秒
1.create()測試
2.all()spa
3.filter()日誌
4.update()code
5.delete()orm
6.first()對象
7.last()
8.get()
9.value()
10.values_list()
11.order_by()
12.count()
13.exclude()
14.exists()
15.reverse()
16.distinct()
# 1.create() 返回值是當前被建立數據的對象自己 # 日期能夠手動給 models.Movie.objects.create(title='紅樓夢',price=876.23,publish_time='2014-1-1') # 還能夠直接傳日期對象 from datetime import date ctime = date.today() models.Movie.objects.create(title='西遊記',price=666.12,publish_time=ctime) # 2.all() queryset對象 res = models.Movie.objects.all() print(res) # 3.filter() queryset對象 <QuerySet [<Movie: Movie object>]> # res = models.Movie.objects.filter(id=1) # pk指代的就是當前表的主鍵字段名,自動查找很是方便 res = models.Movie.objects.filter(pk=1) #res = models.Movie.objects.filter(pk=1,title='python入門') #括號內能夠放多個條件,默認是and關係 print(res) #只要是queryset對象,就能夠經過.query的方式查看到獲取當前對象的內部sql語句 print(res.query) # 4.get() 直接獲取對象自己(不推薦使用) 當查詢條件不存在的時候會直接報錯 res = models.Movie.objects.get(pk=1) print(res) print(res.title) # 5.values() queryset對象,[{},{},{}] 獲取指定字段對應的數據 res = models.Movie.objects.values('title','publish_time') print(res) # 6.values_list() queryset對象,[(),(),()] 獲取指定字段對應的數據 res = models.Movie.objects.values_list('title','price') print(res) #7.first() 取第一個元素對象 數據對象 #Movie res = models.Movie.objects.filter().first() #filter()可省略 print(res) # #8.last() 取最後一個元素對象 數據對象 #Movie res = models.Movie.objects.last() print(res) #9.update() 更新數據 返回的是受影響的行數 res = models.Movie.objects.filter(pk=1).update(title='紅樓夢',price=555) print(res) #10.delete() 刪除數據 返回值 受影響的表及行數 res = models.Movie.objects.filter(pk=3).delete() print(res) #11. count() 統計數據條數 res = models.Movie.objects.filter(pk=1).count() print(res) #12.order_by 按照指定字段排序 # res =models.Movie.objects.order_by('price') # 默認是升序 res = models.Movie.objects.order_by('-price') # 減號就是降序 print(res) #13.exclude 拿到指定字段以外的數據 res = models.Movie.objects.exclude(pk=1) print(res) #14.exists() (瞭解) 判斷指定對象是否有數據 返回布爾值 res = models.Movie.objects.filter(pk=1000).exists() print(res) #15.reverse() 反轉 返回QuerySet對象 res = models.Movie.objects.order_by('price').reverse() print(res) #16.distinct() 去重:去重的前提 必須是由徹底同樣的數據才能夠 返回QuerySet對象 res = models.Movie.objects.values('title','price').distinct() print(res)
# 1.查詢價格大於200的電影 res = models.Movie.objects.filter(price__gt=200) print(res) #QuerySet對象 # 2.查詢價格小於500的電影 res = models.Movie.objects.filter(price__lt=600) print(res) # 3.查詢價格大於等於400的電影 res = models.Movie.objects.filter(price__gte=400) print(res) #print(res.query) # 4.查詢價格小於等於400的電影 res = models.Movie.objects.filter(price__gte=400) print(res) # 5.查詢價格 是789 或555 或120 res = models.Movie.objects.filter(price__in=[789,555,120]) print(res) # 6.查詢價格再200到700之間的電影 顧頭也顧尾 res = models.Movie.objects.filter(price__range=(200,700)) print(res) # 7.查詢電影名中包含字母p的電影 ''' 模糊查詢: 關鍵字 like 關鍵符號 % _ ''' # res = models.Movie.objects.filter(title__contains='p') #默認區分大小寫 res = models.Movie.objects.filter(title__icontains='p') #忽略大小寫 print(res) # 8.查詢2014年出版的電影 res =models.Movie.objects.filter(publish_time__year=2014) print(res) # 9.查詢是1月份出版的電影 res = models.Movie.objects.filter(publish_time__month=1) print(res)
小結:
1.只要是queryset對象就能夠無限制的調用queryset對象的方法
res = models.User.objects.filter(**kwargs).filter().filter().update()/delete()/values()
2.只要是queryset對象就能夠直接點query查看當前queryset對象內部的sql語句
queryset_obj.query
把下面一段固定的日誌文件配置 拷貝到配置文件中便可
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level': 'DEBUG', }, } }