Django之F Q查詢,事務,自定義char欄位

2022-04-10 16:52:36 字數 2292 閱讀 6617

f查詢

from django.db.models import

f,q

#當查詢條件來自於資料庫的某個字段,這個時候就必須使用f

#查詢賣出數大於庫存數的商品

res = models.product.objects.filter(maichu__gt=f('

kucun'))

#將所有商品的**提高100塊

models.product.objects.update(price=f('

price

')+100)

#將所有商品的名字後面加乙個爆款字尾

from django.db.models.functions import

concat

from django.db.models import

value

models.product.objects.update(name=f('

name

')+'

爆款') #

錯誤示範

models.product.objects.update(name=concat(f('

name

'),value('爆款'

))) q查詢

#當你的查詢條件想以或的關係查詢資料

models.product.objects.filter(q(name='

變形金剛

'),q(price=999.99)) #

這樣寫預設還是and關係

models.product.objects.filter(q(name='

變形金剛

')|q(price=999.99))

#q與普通過濾條件混合使用

models.product.objects.filter(q(name='

變形金剛

'),price=100.00)

q查詢高階操作(******)

#先例項化乙個q物件

q =q()

q.connector = 'or'

'name

','jason'))

'price

',666))

#q物件支援直接放在filter括號內

models.user.objects.filter(q) #

q物件預設也是and關係

事務

from django.db import

transaction

with transaction.atomic():

#這裡寫多個資料庫操作

print('

其他邏輯**')

自定義字段型別

class

mycharfield(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):

return

'char(%s)

'%self.max_length

class

user(models.model):

name = models.charfield(max_length=32)

password = mycharfield(max_length=32)

only與defer

#兩者是相反的

res = models.user.objects.only('

name')

choices欄位

class

user(models.model):

name = models.charfield(max_length=32)

password = mycharfield(max_length=32)

choices = ((1,'

重點大學

'),(2,'

普通本科

'),(3,'

專科'),(4,'其他'

)) education = models.integerfield(choices=choices)

user_obj.education

#拿到的是數字

user_obj.get_education_display() #

固定用法 獲取choice欄位對應的注釋

F Q查詢,事務以及only與defer

在models檢視中建立列表 class product models.model name models.charfield max length 32 price models.decimalfield max digits 8,decimal places 2 maichu models.in...

MySql多表查詢 事務

1.準備sql 建立部門表 create table dept id intprimary keyauto increment,name varchar 20 建立員工表 create table emp id intprimary keyauto increment,name varchar 10...

mysql查詢事務和鎖

記錄原因 今天在乙個mysql更新語句的執行過程中,總是執行超時,後來查到原因是因為有乙個事務沒有關閉,導致那條記錄的查詢和更新都會執行超時 以下的sql語句可以查詢當前資料庫,有哪些事務,都鎖定哪些資源 select trx id as 事務id trx state as 事務狀態 trx req...