Django中数据库操作总结

1.增加

bookinfo1 = BookInfo()
bookinfo1.save() insert into
BookInfo.objects.create()

2. 修改
bookinfo2 = BookInfo.objects.get() update xx set where id =
bookinfo2.save()
BookInfo.objects.filter().update()


save(): 如果bookinfo对象有id,则更新,如果没有则新增

3. 删除
bookinfo = BookInfo.objects.get()
bookinfo.delete()
BookInfo.objects.filter().delete()

4. 查询
基本查询

all()
get()
count() 计数,求数量 , 几条数据

过滤查询
get()
filter()
exclude()

过滤条件: 属性__运算符=值

class Area(models.Model):
"""
行政区划
"""
name = models.CharField(max_length=20, verbose_name='名称')
parent = models.ForeignKey('self', on_delete=models.SET_NULL, related_name='subs', null=True, blank=True, verbose_name='上级行政区划')
subs # 查找下级地区
class Meta:
db_table = 'tb_areas'
verbose_name = '行政区划'
verbose_name_plural = '行政区划'

def __str__(self):
return self.name

一找多: 河南省 --- 郑州市,焦作市 : 河南省找下属所有市区: hn_area.area_set /hn_area.subs (查询集,列表,一个一个的area实例对象)
多找一: 郑州市,焦作市 --- 河南省 : 市区找上级省份 : zz_area.parent



5. 关联查询 (关联属性定义在多的一方)

由一到多的访问语法:

一对应的模型类对象.多对应的模型类名小写_set 例:

b = BookInfo.objects.get(id=1)
b.heroinfo_set.all()/filter()/get()

heroinfo_set 与 objects 都是管理器对象

heroinfo_set : 给一方添加的关联查询的管理器对象
对方模型类小写_set


由多到一的访问语法:

多对应的模型类对象.多对应的模型类中的关系类属性名 例:

h = HeroInfo.objects.get(id=1)
h.hbook
h.hbook_id
h.hbook.id/pk

6.关联过滤查询

过滤查询 : 根据自己的属性条件 去 查询自己
关联过滤查询: 根据对方的属性条件 去 查询自己

由多模型类条件查询一模型类数据:
语法如下:
关联模型类名小写__属性名__条件运算符=值 (注意:如果没有"__运算符"部分,表示等于。)

查询图书,要求图书英雄为"孙悟空"
BookInfo.objects.filter(heroinfo__hname='孙悟空')

根据对方的属性条件 ? 自己的模型类中是否有关联属性?
如果有通过关联属性去查找: hbook__属性名
如果没有: django自动添加了一个关联属性 :heroinfo__属性名 (对方的模型类小写__属性名)

BookInfo.objects.filter(btitle='西游记')

由一模型类条件查询多模型类数据:
语法如下:
一模型类关联属性名__一模型类属性名__条件运算符=值

查询书名为“天龙八部”的所有英雄。
HeroInfo.objects.filter(hbook__btitle='天龙八部') # (hbook代表图书对象)
关联过滤查询: 根据对方的属性条件 去 查询自己

根据对方的属性条件 ? 自己的模型类中是否有关联属性?
如果有通过关联属性去查找: hbook__属性名

HeroInfo.objects.filter(hname='郭靖')


总结:
根据一方查找另一方:
首先先看有没有关联属性,有就用。
如果没有,看django提供的语法:

对方的模型类小写__属性 :BookInfo.objects.filter(heroinfo__hname='孙悟空') (根据多的条件找一)
对方的模型类小写_set : bookinfo.heroinfo_set.all() (一找多)

过滤条件总结:自己查找自己: 属性__运算符=值

一方查找另一方: 关联属性/对方模型类小写__属性__运算符=值

posted @ 2019-11-12 18:56  阿磊小哥哥呀  阅读(166)  评论(0)    收藏  举报