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() (一找多)
过滤条件总结:自己查找自己: 属性__运算符=值
一方查找另一方: 关联属性/对方模型类小写__属性__运算符=值

浙公网安备 33010602011771号