zl程序教程

您现在的位置是:首页 >  后端

当前栏目

这篇 感觉很实用--DJANGO ORM

django -- 实用 ORM 这篇 感觉
2023-09-27 14:28:45 时间
Django之model F/Q以及多对多操作

http://www.cnblogs.com/ccorz/p/5882400.html

model之F/Q操作 F操作,使用查询条件的值

打个比方吧,有一张表,保存着公司员工的工资,公司普涨工资,如何在model中操作,这就用到了F,首先需要导入此模块:

from django.db.models import F

操作:

models.UserInfo.objects.filter().update(salary=F(salary)+500)
Q操作,构造搜索条件

model中的查询搜索有三种方式:

models.UserInfo.objects.filter(id=3,name=alex)

需要注意的是,传入字典时,字典前面需要加**,标记为字典

dic = {id:123,name:alex}

models.UserInfo.objects.filter(**dic)

所以我们可以在在捕捉用户输入后,将输入构造成字典,然后将字典当做参数传入查询.

传Q对象,构造搜索条件

首先还是需要导入模块:

from django.db.models import Q
传入条件进行查询:
q1 = Q()

q1.connector = OR

q1.children.append((id, 1))

q1.children.append((id, 2))

q1.children.append((id, 3))

models.Tb1.objects.filter(q1)
合并条件进行查询:
con = Q()

q1 = Q()

q1.connector = OR

q1.children.append((id, 1))

q1.children.append((id, 2))

q1.children.append((id, 3))

q2 = Q()

q2.connector = OR

q2.children.append((status, 在线))

con.add(q1, AND)

con.add(q2, AND)

models.Tb1.objects.filter(con)
model之多对多操作

在数据库表中的对对多,有两种方式:


使用多对多自动创建后,会创建一张第三张表,三张表中会将操作的前两张表中的ID做对应 在没有做ManyToMany 对应的那张表中,会有一列 xx_set 的数据,其中xx为正向的表名,并且为小写 多对多之查询
#正向查询

#获取一个女孩对象

g1 = models.Girl.objects.get(id=1)

# g1 = models.Girl.objects.filter(id=1)

#获取和当前女孩有关系的所有男孩

g1.b.all() #获取全部

g1.b.filter(name=xxx).count() #获取个数


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.filter(id=1) b1.girl_set.clear() #清空与boy中id=1 关联的所有数据 ...
多对多更新

关键词:update,与单表操作相同.

多对多操作补充说明

其实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 ORM Model的基本查询操作API 1.创建Model实例对象 阅读文本前请参考此文章的数据表结构 使用save方法创建Model实例: 由于Topic需要一个User对象,所以,先获取username是admin(超级用户)的User对象,再去创建Topic对象
Django ORM 聚合查询和分组查询 对QuerySet计算统计值,需要使用aggregate方法,提供的参数可以是一个或多个聚合函数 Django提供了一系列的聚合函数,其中Avg(平均值)、Count(计数)、Max(最大值)、Min(最小值)、Sum(加和)最为常用 要使用这些聚合函数,需要将它们引入当前的环境中:
Django ORM F对象和Q对象查询 F对象用于操作数据库中某一列的值,它可以在没有实际访问数据库获取数据值的情况下对字段的值进行引用 使用F对象之前需要将它引入当前的环境中:
Django ORM基本应用与原理剖析 1.ORM构建数据表 由于每一个数据表对应一个Model定义,每一个Model都是一个Python类,所以,Model之间是可以继承的。Django规定,所有的Model都必须继承自django.db.models.Model
因为 Django ORM update,我今天差点「从删库到跑路」 经过周末两天回血,今天早早来到公司,准备把上周遗留的 BUG 修了,然后再多写几个 BUG。 还没等我把双肩包放好,就看见群里有同事反馈,有一个表的数据没了。