startswith,istartswith, endswith, iendswith date字段还可以: models.Class.objects.filter(first_day__year=2017) 外键关系常用操作...它存在于下面两种情况: 外键关系的反向查询 多对多关联关系 简单来说就是当 点后面的对象 可能存在多个的时候就可以使用以下的方法。...键的名称是聚合值的标识符,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。...=10) # 指定一个不存在的出版社id except Exception as e: print(str(e)) 其他鲜为人知的操作(有个印象即可) Django ORM执行原生...('u_id',distinct=True)).filter(uid__gt=1) # SELECT u_id, COUNT( DISTINCT ui_id) AS `uid` FROM UserInfo
如果指定字段,每个字典将只包含指定的字段的键/值。如果没有指定字段,每个字典将包含数据库表中所有字段的键和值。...例如: >>> qs1.difference(qs2, qs3) 16. select_related() select_related(*fields) 沿着外键关系查询关联的对象的数据...这会生成一个复杂的查询并引起性能的损耗,但是在以后使用外键关系时将不需要再次数据库查询。 下面的例子解释了普通查询和select_related()查询的区别。...hometown').get(id=4)将缓存相关的Person 和相关的City: b = Book.objects.select_related('author__hometown').get(id...的ForeignKey使用SQL约束ON DELETE CASCADE,任何具有指向要删除的对象的外键的对象将与它们一起被删除。
(): 对查询结果反向排序,请注意reverse()通常只能在具有已定义顺序的QuerySet上调用(在model类的Meta中指定ordering或调用order_by()方法...也就是什么情况下使用管理对象---->>>> 它存在于下面两种情况: 外键关系的反向查询 多对多关联关系 简单来说就是当 点后面的对象 可能存在多个的时候就可以使用以下的方法。...与对象 把指定的model对象添加到关联对象集中。...键的名称是聚合值的标识符,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。...('u_id',distinct=True)).filter(uid__gt=1) # SELECT u_id, COUNT( DISTINCT ui_id) AS `uid` FROM UserInfo
它存在于下面两种情况: 外键关系的反向查询 多对多关联关系 简单来说就是当 点后面的对象 可能存在多个的时候就可以使用以下的方法。...键的名称是聚合值的标识符,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。...')) Django 支持 F() 对象之间以及 F() 对象和常数之间的加减乘除和取模的操作。...=10) # 指定一个不存在的出版社id except Exception as e: print(str(e)) 其他鲜为人知的操作 Django ORM执行原生SQL #...('u_id',distinct=True)).filter(uid__gt=1) # SELECT u_id, COUNT( DISTINCT ui_id) AS `uid` FROM UserInfo
,当只有一条数据更新时推荐使用此方法,另外此方法还有一个好处,我们接着往下看 具有auto_now属性字段的更新 我们通常会给表添加三个默认字段 - 自增ID,这个django已经默认加了,就像上边的建表语句...('u_id',distinct=True)).filter(uid__gt=1) # SELECT u_id, COUNT( DISTINCT ui_id) AS `uid` FROM UserInfo...('nid').distinct() # select distinct nid from userinfo 注:只有在PostgreSQL中才能使用distinct进行去重 def...例如,下面的代码将删除 pub_date 是2005年的 Entry 对象: Entry.objects.filter(pub_date__year=2005).delete() 等学到外键的时候再说...,在 Django 删除对象时,会模仿 SQL 约束 ON DELETE CASCADE 的行为,换句话说,删除一个对象时也会删除与它相关联的外键对象。
它存在于下面两种情况: 外键关系的反向查询 多对多关联关系 简单来说就是当 点后面的对象 可能存在多个的时候就可以使用以下的方法。...键的名称是聚合值的标识符,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。...')) Django 支持 F() 对象之间以及 F() 对象和常数之间的加减乘除和取模的操作。...=10) # 指定一个不存在的出版社id except Exception as e: print(str(e)) Django ORM执行原生的SQL # extra #...={'new_id': "select id from tb where id > %s"}, select_params=(1,), order_by=['-nid']) 举个例子: models.UserInfo.objects.extra
前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb...点到天荒地老 所以可以通过obj.外键.B表的列表跨表操作(注意!!...,外键__外键列,反向是小写的表名 UserInfo.objects.values_list('nid','ug_id','ug__title') 反向连表: 反向操作无非2种方式: 1、通过对象的形式反向跨表...:小写表面 _set().all() 2、通过 value 和 value_list 方式反向跨表:小写表名__字段 小写的表名_set 得到有外键关系的对象 obj = UserGroup.objects.all...().first() result = obj.userinfo_set.all() [userinfo对象,userinfo对象,] 小写的表名 得到有外键关系的列 #因为使用values取值取得是字典的不是对象
聚合 Django数据库抽象API描述了使用Django查询来添加、删除、查询和修改单个对象的方法。然而,有时需要根据一组对象聚合您想要获得的值。...但是,有时要聚合的值属于所查询模型的关联模型。 在聚合函数中指定聚合字段时,Django允许您在筛选相关字段时使用相同的双下划线符号。Django将处理需要检索和聚合相关值的任何表连接。...如果未指定此类别名,则它将是一个长名称“book__pubdate__min”。) 它不仅用于外键,还用于多对多关系。...应用于公共模型字段的任何过滤器()(或exclude())都将具有约束被认为是聚合的对象的效果。 当使用annotate()子句时,过滤器具有约束注释对象计算的效果。...第一个查询请求具有至少一本得分大于3的书的平均得分。第二个查询仅请求得分超过3的作者书的平均分数。 很难直观地理解ORM如何将复杂的查询集转换为SQL查询。
id字段是自动添加的,如果你想要指定自定义主键,只需在其中一个字段中指定 primary_key=True 即可。...lambda : Q(Q(nid=8) | Q(nid__gt=10)) & Q(caption='root') db_constraint=True # 是否在数据库中创建外键约束...invite_reason = models.CharField(max_length=64) db_constraint=True, # 是否在数据库中创建外键约束...('u_id',distinct=True)).filter(uid__gt=1) # SELECT u_id, COUNT( DISTINCT ui_id) AS `uid` FROM UserInfo...('nid').distinct() # select distinct nid from userinfo 注:只有在PostgreSQL中才能使用distinct进行去重 def
(self, *fields) 性能相关:表之间进行join连表操作,一次性获取关联的数据。...('u_id',distinct=True)).filter(uid__gt=1) # SELECT u_id, COUNT( DISTINCT ui_id) AS `uid` FROM UserInfo..., *fields): #仅取某个表中的数据 models.UserInfo.objects.only('username','id') 或 models.UserInfo.objects.filter...(...).only('username','id') def using(self, alias): 指定使用的数据库,参数为别名(setting中的设置) ############...Django终端打印SQL语句 在Django项目的settings.py文件中,在最后复制粘贴如下代码:即为你的Django项目配置上一个名为django.db.backends的logger实例即可查看翻译后的
from tab_name -- 其中from指定从哪张表筛选,*表示查找所有列,也可以指定一个列 -- 表明确指定要查找的列,distinct用来剔除重复行...外键约束 创建外键 --- 每一个班主任会对应多个学生 , 而每个学生只能对应一个班主任 ----主表 CREATE TABLE ClassCharger( id TINYINT...) VALUES ("yuan",1); -- 删除居然成功,可是 alvin3显示还是有班主任id=1的冰冰的; -----------增加外键和删除外键--------- ALTER TABLE...classcharger(id); ALTER TABLE student DROP FOREIGN KEY abc; INNODB支持的ON语句 --外键约束对子表的含义: 如果在父表中找不到候选键...- 应匹配行的候选键时,父表的行为取决于:在定义子表的外键时指定的 -- on update/on delete子句 -----------------innodb
,通过自定义model的instance可以获取外键实体等,它的方法都是记录级方法(都是实例方法,貌似无类方法),不要在里面定义类方法,比如计算记录的总数,查看所有记录,这些应该放在自定义的manager...先filter,然后对得到的QuerySet执行delete()方法就行了,它会同时删除关联它的那些记录,比如我删除记录表1中的A记录,表2中的B记录中有A的外键,那同时也会删除B记录,那ManyToMany....distinct() 对应的SQL分别为 select distinct name from Author 和 select distinct name,email from Author 2.4.6...(*filed) 返回QuerySet 它可以指定返回哪些关联表model instance,这里的field跟filter()中的键一样,可以用双下划线,但也有不同,You can refer to...OneToOne关联及外键对应的是都是关联表的一条记录,如my_entry=Entry.objects.get(id=1),my_entry.blog就是关联表的一条记录的对象。
目录 Making queries 进行查询 创建一个对象(一条数据记录) 保存修改的表对象 保存外键字段或多对多字段(ForeignKey or ManyToManyField fields) Retrieving...保存外键字段或多对多字段(ForeignKey or ManyToManyField fields) 外键字段 ForeignKey 更新一个外键字段的写法和普通字段的完全一致,只需要将正确类型的对象分配给相关字段即可...(*fields) 优化相关 .only(*fields) 优化相关 .using(alias) 多个数据库时指定数据库(数据库配置可以配好几个数据库连接) .select_for_update(nowait...用 django 表模型类创建的表会自动加上 app 的前缀(显然这里的 app 叫 blog) lookuptype 查找类型分类整理 此部分为伪代码,仅演示这些字段查询的功能用法以及对应 SQL...--> 推测是 遍历、取值,翻译成取值好像更合适一点) alias 别名 特别点 保存外键字段那里,可以直接给外键对象赋值一个对象(blog 对象 --> blog 属性) cache
前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb...---------》数据库里的字段 类实例对应---------》数据库表里的一行数据 obj.id obj.name.....类实例对象的属性 Django orm的优势: Django的orm操作本质上会根据对接的数据库引擎...','ug_id','ug__title') #注意正向连表是 外键__外键列 反向是小写的表名 3....小写的表名 得到有外键关系的列 #因为使用values取值取得是字典的不是对象,所以需要 小写表名(外键表)__ v = UserGroup.objects.values('id'...''' #写到此处问题就来了,原来两个外键 对应2张表 2个主键 可以识别男女 #现在两个外键对应1张表 反向查找 无法区分男女了了 # object对象女.U2U.Userinfo.set
[UNION [ALL|DISTINCT]SELECT···]; 在上述语法中,UNION是实现联合查询的关键字,ALL和DISTINCT是联合查询的选项,其中ALL表示保留所有的查询结果;DISTINCT...,判断子查询语句返回的数据是否与指定的条件相等或不等,然后根据比较结果完成相关需求的操作。...外键约束 添加外键约束 外键指的是-一个表中引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约束, 从而保证数据的一-致性 和完整性。 ➢被引用的表称为主表。...➢具有关联的表中的数据,可以通过连接查询的方式获取,并且在没有添加外键约束时,关联表中的数据插入、更新和删除操作互不影响。...➢对于添加了外键约束的关联表而言,数据的插入、更新和删除操作就会受到一定的约束。 一个具有外键约束的丛表在插入数据时,外键字段的值会受主表数据的约束,保证从表插入的数据必须符合约束规范的要求。
本来今天不想发文的,昨天没发,怪不好意思的 django view URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应。...defer() 不加载指定字段 only() 只加载指定的字段 using() 选择数据库 select_for_update() raw() raw() 使用sql 不熟悉SQL的可以跳过该部分...() 如果我要拿这个模型通过外键绑定的另外一个模型,使用select_related course 模型定义了teacher字段绑定teacher模型 course = Course.objects.only...这样就可以引用模型字段值并使用它们执行数据库操作,而无需实际将它们从数据库中拉出到Python内存中 说白了就是我从数据库拿东西,但是有些需要的字段没有,要通过绑定的外键的app的model拿。...banner模型外键绑定news中的title字段,拿出来它叫news__title,我要给它换个名字叫news_title,这就是注释。
').annotate(Count('id')) # 去重distinct,对应SQL:select distinct(username) from User User.objects.values(...=select).values('day').annotate(number=Count('id')) Q 的使用 Q对象可以对关键字参数进行封装,从而更好的应用多个查询,可以组合&(and)、|(or..._t = _t.filter( Q(title__icontains=_s) | Q(content__icontains=_s) ) return _t 外键...User.objects.filter(role=_t) 第三种反向查询的方法: 如果外键字段有related_name属性,例如models如下: class User(models.Model):...) # get_object_or_404方法,它会先调用django的get方法,如果查询的对象不存在的话,则抛出一个Http404的异常 实现方法类似于下边这样: from django.http
对应app目录下的models.py 1、生成一个简单的数据库表: 在未指定primary_key的情况下,Django会默认创建一个id自增字段作为主键。...=2) #创建书的出版社信息,其与出版社的外键关系为一对多,所以用外键 publish = models.ForeignKey(Publish) #创建书的出版日期...")#为作者指定Author这张表做为外键 book=models.ForeignKey("Book")#为书籍指定Book这张表做为外键 author_obj=models.Author.objects.filter...每个字典表示一个对象,键对应于模型对象的属性名称。...如果指定字段,每个字典将只包含指定的字段的键/值。如果没有指定字段,每个字典将包含数据库表中所有字段的键和值。
其他值包括True(强制此列具有自动递增语义以供复合主键使用)、False(此列永远不应具有自动递增语义)和字符串"ignore_fk"(外键列的特殊情况,请参见下文)。...attribute sorted_tables 返回一个按外键依赖顺序排序的Table对象列表。 排序将会先放置具有依赖关系的Table对象,然后才是依赖对象本身,代表着它们可以被创建的顺序。...其他值包括True(强制此列对于复合主键也具有自动递增语义),False(此列不应具有自动递增语义),以及字符串"ignore_fk"(外键列的特殊情况,请参见下文)。...attribute sorted_tables 返回一个按外键依赖顺序排序的Table对象列表。 排序将首先将具有依赖关系的Table对象放置在依赖关系本身之前,表示它们可以被创建的顺序。...这是另一个必须在此之前创建的 Table 对象,或者在此之后删除的对象。 通常,表之间的依赖关系是通过外键对象确定的。然而,对于创建外键以外的其他情况(规则、继承),可以手动建立这样的链接。
Django官方文档https://docs.djangoproject.com/en/2.1/ref/models/fields/ 3.表与表之间的关联 1.外键 即一对多的关系 school=models.ForeignKey...这里的id是自动创建的,school_id是school添加外键产生的 如果想要与另一张表的其他字段添加外键,需要在加上参数to_filed=’字段名’,同时这个字段必须是unique=True 2.一对一...直接设置外键的id 在student.objects.create中加 school_id=1 通过获取外键对象设置 obj = school.objects.get(name="school1")....num) 拿时外键对象的字段 student1 = student.objects.filter(id=2)[0] print(student1.school.name) 拿多对多关系的字段 因为是多对多关系...使用’__’进行的查找 一对多 school_name为外键对象的字段 school为student表中设置的外键字段 student1=student.objects.filter(id=2).values
领取专属 10元无门槛券
手把手带您无忧上云