Django的orm的 數據庫查詢語法大全


Django的orm的高級操作

查詢語法大全:

  1. 比較運算符
# id > 3
res = models.UserInfo.objects.filter(id__gt=3)
# id >= 3
res = models.UserInfo.objects.filter(id__gte=3)
# id < 3
res = models.UserInfo.objects.filter(id__lt=3)
# id <= 3
res = models.UserInfo.objects.filter(id__lte=3)
# id != 3
res = models.UserInfo.objects.exclude(id=3)
# id = 2 and name = "zekai"
res = models.UserInfo.objects.filter(id=2,name="zekai")


# or
from django.db.models import Q
res = models.UserInfo.objects.filter(Q(id__gt=3|Q(name='zekai')))

2 . 身份運算符 in, not in

in
res = models.UserInfo.objects.filter(id__in=[2,3,4])

not in
res = models.UserInfo.objects.exclude(id__in=[2,3,4])

3 .between...and

res = models.UserInfo.objects.filter(id__range=[1,2,3,4])

4 .like

# 以'ze'開頭
res = models.UserInfo.objects.filter(name__startswith='ze')

# g: 全局 global  i:忽略大小寫 ignore    以ze開頭,且忽略大小寫
res = models.UserInfo.objects.filter(name__istartswith='ze')


# 以'ze'結尾
res = models.UserInfo.objects.filter(name__endswith='ze')

res = models.UserInfo.objects.filter(name__iendswith='ze')

# 包含ze的
res = models.UserInfo.objects.filter(name__contains='ze')
res = models.UserInfo.objects.filter(name__icontains='ze')


5 .count

res = models.UserInfo.objects.filter(id__gt=3).count()

6 .order by

# 數據以id升序
res = models.UserInfo.objects.all().order_by('id')


# 數據以id降序
res = models.UserInfo.objects.all().order_by('-id')

# 數據以id降序,id相同的話 以age升序
res = models.UserInfo.objects.all().order_by('-id','age')

7 . group by

 導入模塊
from django.db.models import Avg, Sum, Max, Min, Count

# 
res = models.UserInfo.objects.values("name").annotate(s=Sum('age'))


res = models.UserInfo.objects.values("name").annotate(s=Sum('age')).filter(s__gt=50)

8 .limit

# 從第10行開始取,取到20行
all()就是一個列表。因此[10:20]就是一個切片
res = models.UserInfo.objects.all()[10:20]
9. last
# 取最后一行數據
res = models.UserInfo.objects.last()
10. only
# 僅取name這列數據,(id默認會被取進去)
res = models.UserInfo.objects.only('name')
11. defer
# 排除name這列數據,其他列的數據都會取進去,(id默認會被取進去)
res = models.UserInfo.objects.defer('name')
12. F(批量操作列的數據)
from django.db.models import F
# 對UserInfo表中age列的所有數據 加 1
res = models.UserInfo.objects.update(age=F('age')+1)

原生的SQL

1 .使用extra

'''
解釋:結果集修改器,一種提供額外查詢參數的機制
說明:依賴model模型
'''
用在where后:
    Book.objects.filter(publisher_id="1").extra(where=["title='python學習1'"])    

用在select后  
    Book.objects.filter(publisher_id="1").extra(select={"count":"select count(*) from hello_book"})

2 .使用raw方法

'''
解釋:執行原始sql並返回模型
說明:依賴model多用於查詢
'''
# 用法:
book = Book.objects.raw("select * from hello_book")
for item in book:
    print(item.title)

3 . 執行自定義SQL

'''
解釋:利用游標執行
導入:from django.db import connection
說明:不依賴model
'''

# 用法:

from django.db import connection
cursor = connection.cursor()
#插入
cursor.execute("insert into hello_author(name) values('xiaol')")
#更新
cursor.execute("update hello_author set name='xiaol' where id=1")
#刪除
cursor.execute("delete from hello_author where name='xiaol'")
#查詢
cursor.execute("select * from hello_author")
#返回一行
raw = cursor.fetchone()
print(raw)
#返回所有
cursor.fetchall()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM