打個比方吧,有一張表,儲存著公司員工的工資,公司普漲工資,如何在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'
models.tb1.objects.filter(q1)
合併條件進行查詢:
con = q()
q1 = q()
q1.connector = 'or'
q2 = q()
q2.connector = 'or'
con.add(q1, 'and')
con.add(q2, 'and')
models.tb1.objects.filter(con)
在資料庫表中的對對多,有兩種方式:
自定義第三張表
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()
Django學習系列之django分頁
from django.core.paginator import paginator objects post.objects.filter status published 從資料庫中取出所有status published狀態的文章p paginator objects,3 例項化pagina...
構之以技術,付之以匠心 讀《構建之法》有感
開發人員容易陷入這樣一種魔怔的狀態 技術為大,編碼為重,其他都是浮雲。但其實縱觀軟體的生命週期,從需求分析到後期維護更新,每一步都有講究。編碼,並不是唯一。這個感受在我拜讀了鄒欣老師的 構建之法 後更為深刻。萬事開頭難,需求分析作為軟體開發的開始,自然也是令人頭疼。說真的在學校做課設時,我十分反感小...
2 django之搭建django工程
1 建立虛擬環境 mkvirtualenv 虛擬環境名稱 p python3 2 安裝框架 pip install django 1.11.11 3 複習虛擬環境和pip的命令 虛擬環境 mkvirtualenv 建立虛擬環境 rmvirtualenv 刪除虛擬環境 workon 進入虛擬環境 檢視...