最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

【經驗分享】Django開發(fā)中常用到的數據庫操作總結

2022-06-28 19:08 作者:騰訊藍鯨智云  | 我要投稿

查詢類操作

1)查詢所有的結果,相當 sql 中的 select * from

list = Test.objects.all()


2)條件查詢,filter 相關 sql 中的 where,用于過濾查詢結果

傳多個參數:result = Test.objects.filter(id=1, name=’test’)

如果多條件與查詢,直接用逗號隔開,filter函數里面的參數都是Test Model中的字段


3)獲取單個對象,get 方法的參數一般為 Model 的主鍵,如果找不到會報錯

test_obj = Test.objects.get(id=1)


4)限制返回的結果數據的數量,相當于 sql 中的 limit,其中 order_by 是用于排序,如果根據字段 a 倒序排序,就是 order_by(“-time”)

Test.objects.order_by('name')[0:2]


5)鏈式查詢

Test.objects.filter(name=’test’).order_by(“-ctime”)


6)多條件參數查詢,傳字典,構造查詢條件

data = Test.objects.filter(**query_dict).order_by(“-ctime”).values

其中query_dict為一個字典,key為條件字段,value為條件值

query_dict = {'id':123,'name':’yyp’}


7)傳 Q 對象,構造查詢條件

  • 在 filter() 等函式中關鍵字參數彼此之間都是 ?“and” ?關系。但是要執(zhí)行更復雜的查詢(比如,實現篩選條件的 or 關系),可以使用 Q 對象。

  • Q對象包括 AND 關系和 OR 關系

  • Q 對象可以用&和 | 運算符進行連接。當某個操作連接兩個 Q 對象時,就會產生一個新的等價的 Q 對象


1、第一步,構造Q對象:

fromdjango.db.models import Q

Q(name__startswith=’h’) | Q(name__startswith=’p’)

2、第二步,Q對象以查詢參數方式使用,多個Q對象是and關系:

Test.objects.filter(

Q(date=’2018-10-10 00:00:00’),

Q(name__startswith=’h’) | Q(name__startswith=’p’)

> filter() 等函數可以接受 Q對象和條件參數,但Q對象必須放在條件參數前面


8)過濾不滿足條件的操作

data = Test.objects.exclude(id=1)


傳入條件查詢

q1 = Q()

q1.connector = 'OR'? ? ? ? ? ? ? #連接方式

q1.children.append(('id', 1))

q1.children.append(('id', 2))

q1.children.append(('id', 3))

models.Tb1.objects.filter(q1)


合并條件查詢

con = Q()

q1 = Q()

q1.connector = 'OR'

q1.children.append(('id', 1))

q1.children.append(('id', 2))

q1.children.append(('id', 3))

q2 = Q()

q2.connector = 'OR'

q2.children.append(('status', '在線'))

con.add(q1, 'AND')

con.add(q2, 'AND')

models.Tb1.objects.filter(con)

增加類操作

1) 新增一條記錄

test1 = Test(name=’yyp’)

test1.save()

更新類操作

1)先查詢獲取對象,再修改對象的值,再保存

test1 = Test.objects.get(id=1)

test1.name = ‘Google’

test1.save()


2)條件鏈式更新

Test.objects.filter(id=1).update(name=‘Google’)

刪除類操作

1)先查詢獲取要刪除的對象,然后直接delete操作

// 刪除id=1的數據

test1 = Test.objects.get(id=1)

test1.delete()

2)條件刪除

Test.objects.filter(id=1).delete()


QuerySet相關

Django中model查詢出來的結構類型為QuerySet,本質是一個查詢對象集。

1)將多個查詢結果轉換為字典列表

// all()方法查詢出來的是QuerySet,用values方法轉成字典集

data= Test.objects.all().values()

data_dict_list = list(data)

<QuerySet [<Test: ?test>]> ? ?----><QuerySet [{“id”:XXX, “name”:XXX}]>


2)QuerySet對象轉換成字典對象

fromdjango.forms.models import model_to_dict

data = Test.objects.get(id=1)

data_dict = model_to_dict(data)


3)序列化成json數據

對于很多web開發(fā)接口的時候,要返回的是json數據,而django從DB查詢出來的是對象集,可以考慮django-rest-framework 庫的serializers類,具體可參考:https://q1mi.github.io/Django-REST-framework-documentation/tutorial/1-serialization_zh/

查詢條件總結

字段名__op:

__exact 精確等于 like ‘aaa’

__iexact精確等于忽略大小寫ilike‘aaa’

__contains 包含 like ‘%aaa%’

__icontains包含忽略大小寫ilike‘%aaa%’,但是對于sqlite來說,contains的作用效果等同于icontains。

__gt大于

__gte大于等于

__lt小于

__lte小于等于

__in 存在于一個list范圍內

__startswith以…開頭

__istartswith以…開頭忽略大小寫

__endswith以…結尾

__iendswith以…結尾,忽略大小寫

__range 在…范圍內

__year 日期字段的年份

__month 日期字段的月份

__day 日期字段的日

__isnull=True/False

使用sql語句進行查詢

fromdjango.db import connection

cursor = connection.cursor()

cursor.execute(“select * from Test where name = %s”, "yyp")

row = cursor.fetchone()

本文由騰訊藍鯨智云編輯發(fā)布,騰訊藍鯨智云(簡稱藍鯨)軟件體系是一套基于PaaS的技術解決方案,致力于打造行業(yè)領先的一站式自動化運維平臺。目前已經推出社區(qū)版、企業(yè)版,歡迎體驗。

- 官網:https://bk.tencent.com/

- 下載鏈接:https://bk.tencent.com/download/

- 社區(qū):https://bk.tencent.com/s-mart/community/question


【經驗分享】Django開發(fā)中常用到的數據庫操作總結的評論 (共 條)

分享到微博請遵守國家法律
新乡市| 奉化市| 额济纳旗| 黑河市| 上高县| 遵义市| 米易县| 沂源县| 泸定县| 吴旗县| 凌海市| 延津县| 东辽县| 阿图什市| 泰安市| 张家口市| 宁晋县| 山阳县| 北川| 孝感市| 辉南县| 奉化市| 河西区| 隆尧县| 房山区| 焦作市| 阳泉市| 边坝县| 东光县| 兴文县| 香格里拉县| 社会| 安陆市| 会东县| 罗平县| 北辰区| 民勤县| 昌黎县| 绥德县| 铁岭市| 南安市|