打個比方吧,有一張表,儲存著公司員工的工資,公司普漲工資,如何在model中操作,這就用到了f,首先需要匯入此模組:
from django.db.models import f
操作:
models.userinfo.objects.filter().update(salary=f('salary')+500)
model中的查詢搜尋有三種方式:
傳引數傳字典
傳q物件
models.userinfo.objects.filter(id=3,name='alex')
需要注意的是,傳入字典時,字典前面需要加**
,標記為字典
dic =
models.userinfo.objects.filter(**dic)
所以我們可以在在捕捉使用者輸入後,將輸入構造成字典,然後將字典當做引數傳入查詢.
首先還是需要匯入模組:
from django.db.models import q
傳入條件進行查詢:q1 = q()
q1.connector = 'or'
合併條件進行查詢:con = q()
q1 = q()
q1.connector = 'or'
在資料庫表中的對對多,有兩種方式:
自定義第三張表
class b2g(models.model): b_id = models.foreignkey('boy') g_id = models.foreignkey('girl') class boy(models.model): username = models.charfield(max_length=16) class girl(models.model): name = models.charfield(max_length=16)
使用models中自帶的manytomanyfiled自動建立第三張表
class boy(models.model):
username = models.charfield(max_length=16) # girl_set def __str__(self): return str(self.id) class girl(models.model): name = models.charfield(max_length=16) b = models.manytomanyfield('boy') def __str__(self): return str(self.id)
我們重點討論第二中方式,有一點可以確認的是:
#正向查詢
#獲取乙個女孩物件
g1 = models.girl.objects.get(id=1)
# g1 = models.girl.objects.filter(id=1) #獲取和當前女孩有關係的所有男孩 g1.b.all() #獲取全部 g1.b.filter(name='***').count() #獲取個數 #反向查詢 b1 = models.boy.objects.get(id=1) b1.girl_set.all() #獲取全部 #連表查詢 ##正向連表 models.girl.objects.all().values('id','name','b__username') ##方向連表 models.boy.objects.all().values('id','name','girl__name') #注意此處為girl__name,並非girl_set__name.
#正向
g1 = models.girl.objects.get(id=1)
g1.b.add(models.boy.objects.get(id=1))
g1.b.add(1) #可以直接新增id號
bs = models.boy.objects.all()
g1.b.add(*bs) #可以新增列表
g1.b.add(*[1,2,3]) #可以新增id的列表
#反向 b1 = models.boy.objects.get(id=1) b1.girl_set.add(1) b1.girl_set.add(models.girl.objects.all()) #新增和女孩1 與男孩1 2 3 4關聯 b1.girl_set.add(*[1,2,3,4])
多對多的刪除有兩個引數:
#正向
g1 = models.girl.objects.filter(id=1)
#刪除第三張表中和女孩1關聯的所有關聯資訊
g1.b.clear() #清空與gilr中id=1 關聯的所有資料
g1.b.remove(2) #可以為id
g1.b.remove(*[1,2,3,4]) #可以為列表,前面加* #反向 b1 = models.boy.objects.filter(id=1) b1.girl_set.clear() #清空與boy中id=1 關聯的所有資料 ...
其實django中models的操作,也是呼叫了orm框架來實現的,pymysql 或者mysqldb,所以我們也可以使用原生的sql語句來運算元據庫:
from django.db import connection
cursor = connection.cursor()
cursor.execute("""select * from tb where name = %s""", ['lennon'])
row = cursor.fetchone()
SQL語句很實用很巧妙的用法
1.ignore的用法 在insert 後面加上ignore之後,如果插入的資料有重複等問題時,失敗不會報錯,很實用的小技巧 insert ignore into success killed seckill id,user phone,state values 0 2.ifnull a,0 函式的...
不學習的日子感覺很的空虛
真的是兩天不學習就會感到很空虛啊!七期的哥哥姐姐都畢業了,八期也有十幾個畢業生,所以這次的假期長了一點。我們是從20號到26號一共七天。因為已經畢業一年了,所以這次放假沒什麼事,主要就是回家看看爸媽。22號到家,老爸老媽都在家,老媽見到我的第一句話就是 怎麼這麼胖了?自從畢業後每天的生活就是坐在電腦...
不學習的日子感覺很的空虛
真的是兩天不學習就會感到很空虛啊!七期的哥哥姐姐都畢業了,八期也有十幾個畢業生,所以這次的假期長了一點。我們是從20號到26號一共七天。因為已經畢業一年了,所以這次放假沒什麼事,主要就是回家看看爸媽。22號到家,老爸老媽都在家,老媽見到我的第一句話就是 怎麼這麼胖了?自從畢業後每天的生活就是坐在電腦...