Django 單表查詢

前言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

查看全部orm語句內部的sql語句

把下面一段固定的日誌文件配置 拷貝到配置文件中便可

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level': 'DEBUG',
        },
    }
}
相關文章
相關標籤/搜索