djangoORM语句
生活随笔
收集整理的這篇文章主要介紹了
djangoORM语句
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.這段語句配置寫在settings里可以把數據庫語句顯示在前端 LOGGING = {'version': 1,'disable_existing_loggers': False,'handlers': {'console':{'level':'DEBUG','class':'logging.StreamHandler',},},'loggers': {'django.db.backends': {'handlers': ['console'],'propagate': True,'level':'DEBUG',},}
}
2.數據庫外鍵處理
反向查詢:related_name='表名' 表關系: db_constraint=False:斷開表關系 on_delete=models.CASCADE 級聯關系,可以做級聯刪除 on_delete=models.SET_NULL,null=True設置為空 on_delete=models.SET_DEFAULT,default=0 設置成默認值為0 on_delete=models.DO_NOTHING不處理該字段 注:多對多關系不需要明確on-delete3.表查詢練習
from django.db import models # 書本表 class Book(models.Model):title=models.CharField(max_length=32)price=models.CharField(max_length=32)publish_date=models.DateField(auto_now_add=True)publish=models.ForeignKey(to="Publish")authors=models.ManyToManyField(to='Author')def __str__(self):return self.title # 必須返回一個字符串類型 否則直接報錯#出版社表 class Publish(models.Model):name=models.CharField(max_length=32)addr=models.CharField(max_length=32)email=models.EmailField()def __str__(self):return self.name#作者表 class Author(models.Model):name=models.CharField(max_length=32)age=models.CharField(max_length=32)author_dateil=models.OneToOneField(to='AuthorDetail')def __str__(self):return self.name# 作者信息表 class AuthorDetail(models.Model):phone=models.CharField(max_length=32)addr=models.CharField(max_length=32)def __str__(self):return self.phoneimport osif __name__ == "__main__":os.environ.setdefault("DJANGO_SETTINGS_MODULE", "books.settings")import djangodjango.setup()from app import modelsprint(models.Publish.objects.all())publish_obj = models.Publish.objects.filter(pk=2).first()models.Book.objects.create(title='無敵天下', price=589, publish=publish_obj)models.Publish.objects.create(name='天堂出版社', addr='天京', email='11528654@qq.com')obj = models.Publish.objects.filter(id=5).first()print(obj.name)# 傳數字obj = models.Publish.objects.filter(pk=5).first()# 傳對象models.Book.objects.filter(pk=2).update(publish=obj)book_obj = models.Book.objects.filter(pk=5).first()# # book_obj.authors.add(1)# author_onj=models.Author.objects.get(pk=2)# 傳對象# book_obj.authors.add(author_onj)author_list = models.Author.objects.all()# 傳列表book_obj.authors.add(*author_list)# 刪除中間關系表book_obj = models.Book.objects.filter(pk=5).first()book_obj.authors.remove(2)# 跨表查詢都可以根據對象進行查詢,刪除,修改book_obj = models.Book.objects.filter(pk=4).first()author_obj = models.Author.objects.all()book_obj.authors.add(*author_obj)book_obj = models.Book.objects.filter(pk=6).first()book_obj.authors.set([2, ])# 查詢天堂出版社出版的書publish_obj = models.Publish.objects.filter(name='天堂出版社').first()print(publish_obj.book_set.all())# 查詢jason出版的書author_obj = models.Author.objects.filter(name='jason').first()print(author_obj.book_set.all())# 查地址print(author_obj.author_dateil.phone)# 查詢地址print(author_obj.author_dateil.addr)# 查詢手機號是110的作者姓名 # 反向查詢表名小寫 author_obj = models.AuthorDetail.objects.filter(phone='110').first() print(author_obj.author.name)# 查詢書本出版社 book_obj = models.Book.objects.filter(title='靜瓶梅').values('publish__name') print(book_obj) # 查詢書本的作者 book_obj = models.Book.objects.filter(title='銀瓶梅').values('authors__name', 'title') print(book_obj) # 查詢作者的手機號res = models.Author.objects.filter(name='jason').values('author_dateil__phone') print(res)# 查詢書本作者的手機號 res = models.Book.objects.filter(title='遮天').values('title', 'authors__name', 'authors__author_dateil__phone') print(res)# 查詢出版社的所有圖書的名字和價格 res = models.Publish.objects.filter(name='天堂出版社').values('book__title', 'book__price') print(res) res1 = models.Book.objects.filter(publish__name='北方出版社').values('title', 'price') print(res1) # 查詢所有的書本的作者 resf = models.Author.objects.values('book__title', 'name') print(resf)
?
轉載于:https://www.cnblogs.com/xzcvblogs/p/11278495.html
總結
以上是生活随笔為你收集整理的djangoORM语句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 听法国设计师大卫·维森特讲述他与Core
- 下一篇: sqlserver中用到的一些方法:co