日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

django mysql搜索_Django--数据库查询操作

發布時間:2025/4/5 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 django mysql搜索_Django--数据库查询操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

F查詢和Q查詢:

F查詢:

Django中提供f()來進行兩個值之間的比較,F()可以在查詢中引用字段來,來比較同一個model實例中的兩個不同的字段

示例1:查詢賣出數量大于庫存數量的商品

from django.db.models importF

ret1=models.Product.objects.filter(maichu__gt=F('kucun'))print(ret1)

F可以用來幫我們取到表中某個字段對應的值來當作我們的篩選條件,而不是我認為自定義的常量了,實現了動態比較的效果

Django支持F對象和F對象之間的加減乘除的取模的操作。基于此可以子啊表中的數值類型進行數學運算

將每個商品的價格提高50塊

models.Product.objects.update(price=F('price')+50)

如果修改char字段,在后面加上新的字符,這個時候是需要使用Concat操作,并且要和憑借值Value一起使用。

Q查詢:

filter()等方法中使用逗號隔開的條件的與的關系。如果這時候你需要執行更復雜的查詢(or...),那么就可以使用Q對象了

示例1:查詢賣出數量大于100或者價格少于100塊的商品:

from django.db.models importQ

models.Product.objects.filter(Q(maichu__gt=100)|Q(price__lt=100))

對條件包裹一層Q的時候,filter就可以支持交叉與或并的比較符

示例二:查詢庫存數是100并且賣出數量不是0的產品

models.Product.objects.filter(Q(kucun=100)&~Q(maichu=0))

我們可以組合使用&和|操作符以及使用括號進行分組來編寫任意復雜的Q對象,同時Q對象可以使用~操作符進行取反, 這允許組合正常的查詢和取反(NOT)查詢

示例三:查詢產品名包含新款,并且庫存數大于60的

models.Product.objects.filter(Q(kucun__gt=60), name__contains="新款")

查詢函數可以混合使用Q對象和關鍵字參數。所有提供給查詢函數的參數(關鍵字參數或Q對象)都將

“AND”在一起。但是如果出現Q對象,它必須位于所有關鍵字參數的前面

Q對象的補充:

from django.db.models importF, Q

q=Q()

q.connector= 'or' #通過這個參數可以將Q對象默認的and關系變成or

q.children.append(('price', 188.88))

q.children.append(('name', '高跟鞋'))

res=models.Product.objects.filter(q)print(res)

事務操作:

事務的ACID:

原子性、一致性、隔離性、持久性

定義:將多個sql語句操作變成原子性操作,要么同時成功,有一個失敗則在里面回滾都原來的狀態,保證數據的完整性和一致性(NoSQL數據庫對于事務則是部分支持)

from django.db importtransaction

with transaction.atomic():#在with代碼塊中寫事務操作

models.Product.objects.filter(id=1).update(F('kucun') - 1, F('maichu') + 1)

自定義orm的字段:

classMyCharField(models.Field):def __init__(self, max_length, *args, **kwargs):

self.max_length=max_length

super().__init__(max_length=max_length, *args, **kwargs)defdb_type(self, connection):return 'char(%s)' %self.max_lengthclassProduct(models.Model):

info= MyCharField(max_lengh=32)

only和defer:拿到的是一個對象,兩者之間是相反的

res = models.Product.object.defer("name")for i inres:print(i.name)

res= models.Product.object.only("name")for i inres:print(i.name)

1、常用字段

AutoField:

int自增列,必須填入參數primary_key=True。當model中如果沒有自增列,則自動會創建一個列名為id的列

IntegerField:

一個整數類型,范圍在 -2147483648 to 2147483647。(一般不用它來存手機號(位數也不夠),直接用字符串存,)

CharField:

字符類型,必須提供max_length參數, max_length表示字符長度。

Django中的CharField對應的MySQL數據庫中的varchar類型,沒有設置對應char類型的字段,但是Django允許我們定義新的字段,在上面已經定義了。

update和save之間的區別:

兩者都是對數據的修改和保存的操作,但是save函數是將數據列的全部數據項全部重新寫了一遍,而update則是針對修改項進行針對的跟新,效率高而且耗時更少。所以以后要是有對數據的修改更推薦使用uodate()

choices:

choices = ((1, '男'), (2,'女'),(3,'其他'))

gender= models.IntegerField(choices=choices, default=2)

res= models.Product.objects.filter(id=1).first()print(res.get_gender_display()) #可以直接查到指定數據中的性別關鍵字

總結

以上是生活随笔為你收集整理的django mysql搜索_Django--数据库查询操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。