這篇 感覺很實用 DJANGO ORM

2021-09-23 00:05:04 字數 2980 閱讀 6356

打個比方吧,有一張表,儲存著公司員工的工資,公司普漲工資,如何在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號到家,老爸老媽都在家,老媽見到我的第一句話就是 怎麼這麼胖了?自從畢業後每天的生活就是坐在電腦...