$Django 多表操作(增删改查,基于双下划线,对象的查询) 在Python脚本中调用Django环境...
0在Python腳本中調用Django環境、
import osif __name__ == '__main__':
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "工程名.settings")
import django
django.setup()
from app01 import models
?
?1 創建多表模型(詳情見代碼)
??#用了OneToOneField和ForeignKey,模型表的字段,后面會自定加_id
id = models.AutoField (primary_key=True)
name = models.CharField (max_length=32)
xiang = models.OneToOneField (to='Xiang', to_field='id')
??# ManyToManyField會自動創建第三張表:格式如下
class Zuozhe (models.Model):id = models.AutoField (primary_key=True) class Books (models.Model):
id = models.AutoField (primary_key=True)
name = models.CharField (max_length=32)
price = models.DecimalField (max_digits=5, decimal_places=2)
banse = models.ForeignKey (to=Banse, to_field='id')
zuozhe = models.ManyToManyField (to='Zuozhe')
??# *************重點
??# 一對一的關系:OneToOneField
??# 一對多的關系:ForeignKey
??# 多對多的關系:ManyToManyField
??
?2 添加表記錄
??1 一對多create
???-兩種方式:
????-publish=對象 #創建時的字段=對象
????-publish_id=id #數據庫里的實際字段=id
publish=models.Publish.objects.get (pk=1)
models.Book.objects.create (name='西游記', price=34.5, publish=publish)
??2 一對多刪除:同單表刪除 delete()
??3 一對多修改:兩種方式,可以傳對象,可以傳id, update()
??4 一對一跟一對多一樣
??5 多對多: ? 注意這里是拿到對象在 增刪改
???-add? ----->可以傳對象,可以傳id,可以傳多個
# book.zuozhe.add(1,2)
???-remove? ----->可以傳對象,可以傳id,可以傳多個
???-clear? ---->沒有參數
???-set ? 修改 ----->必須傳可迭代對象(一般列表),列表里面可以是對象,可以是id (舉例:這本書的作者,set([1,2,3] 表里有就不改動了,沒有添加,這本書之前的其他作者刪除))
book.zuozhe.set ([3, 2, 1])
?3 基于對象的跨表查詢: 對象??绫?跨表_set--->object對象 | None | None。all() 拿到一個queryset對象
??1 一對一 :沒有all,沒_set
???正向:正向查詢按字段
?
# lqz=models.Zuozhe.objects.filter(name='lqz').first()# print(lqz.xiang.address)
?
???反向:反向查詢按表名小寫
# phone=models.Xiang.objects.filter(phone='120').first()# print(phone.zuozhe.name)
??2 一對多
???正向:正向查詢按字段
???反向:反向按表名小寫_set.all()
??3 多對多
???正向:正向查詢按字段
# print(book.zuozhe.all())
# for i in book.zuozhe.all():
# print(i.name)
???反向查詢:反向按表名小寫_set.all()
?
lqz=models.Zuozhe.objects.filter(name='lqz').first()pp=lqz.books_set.all()
print(pp)
for i in pp :
print(i.name)
?
??4******基于對象的查詢,多次查詢(子查詢)
?
總結: 多個.all()或者小寫表名_set.all()??
?4 基于雙下劃線的跨表查詢?
??-連表查詢
??-一對一雙下劃線查詢
???-正向:按字段,跨表可以在filter,也可以在values中
???-反向:按表名小寫,跨表可以在filter,也可以在values中
?
5.修改
models.User.objects.filter(id=1).update(name='wd')
?
轉載于:https://www.cnblogs.com/3sss-ss-s/p/9954210.html
總結
以上是生活随笔為你收集整理的$Django 多表操作(增删改查,基于双下划线,对象的查询) 在Python脚本中调用Django环境...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python基础(一)简介与安装
- 下一篇: 最短路模板