Django 的 ORM 是创建 SQL 去查询和操作数据库的一个 Python 式的方式。 F查询 Q查询 F 查询 在前几个小章节里,构造的过滤器都只是将字段值与某个常量做比较。...示例: 查询浏览数大于评论数的文章 Django 支持 F() 对象之间以及 F() 对象和常数之间的加减乘除和取模的操作。...例如:在所有标题后面加上(原创) Q 查询 filter() 等方法中的关键字参数查询都是一起进行 "AND"。如果需要执行更复杂的查询(例如:OR 语句)可以使用 Q 对象。...示例: 查询作者是“小团子”或“yuntuan”的文章 可以组合 & 和 | 操作符以及使用括号进行分组来编写任意复杂的 Q 对象。...同时,Q 对象可以使用 ~ 操作符取反,这允许组合正常的查询和取反(NOT)查询。 示例: 查询作者名字是“小团子”并且不是2018年发表的文章的标题。 查询函数可以混合使用 Q 对象和关键字参数。
查看Django ORM生成的MySQL数据库的SQL语句 Django ORM生成的MySQL数据库的SQL语句其实可以通过打印QuerySet对象的query属性来查看,但是这样只能查看到对应的SQL...语句,你依旧不知道在Mysql数据库中执行了操作。...`is_delete` FROM `bookinf 通过MySQL日志来查看SQL语句 首先,这需要开启Mysql的日志记录功能。...tail -f /var/log/mysql/query.log 现在在Django的shell中做数据库操作,MySQL的日志这里就会有显示。...例如: 这样,我们在Django中如果需要优化ORM的查询,可以通过查看MySQL日志来进行分析定位,查看问题所在。
Django ORM对数据库操作的封装相当完善,日常大部分数据库操作都可以通过ORM实现。 但django将查询过程隐藏在了后台,这在开发时可能会略显晦涩,并且使用方式不当还会造成开销过大。...那么如何查看django何时执行了什么sql语句呢?答案是使用Logging。...9, 10, 11, 12) [2018-04-21 21:09:14,708] "GET / HTTP/1.1" 200 22325 上面打印出的日志是我的博客首页获取前十篇文章时所执行的部分SQL语句...,还可以由此知道django何时执行了SQL。...在某些情况下我们可以通过这种方式判断,后台是否重复执行了SQL语句,便于指导数据库访问优化。 Django使用Python的内建的logging模块执行系统日志记录。
def orm_test(request): """ 增加操作 """ # 新增一个名字为1901的一个班级,create是新增方法,里面可以接受多个字段参数 #...Class.objects.create(name="1901") # 同时新增一个学生和班级操作 # 新增一个班级名称为1903的班级,返回一个班级实例 # cls_instance...#学生的姓名 学生的年龄 学生的分数 # print(stu.name,stu.age,stu.score) #对查询集结果进行切片,取第0个到第4个,和列表的切片一样...语句 # 精准查找 两条语句作用一样,查询姓名位小美的学生,结果返回查询集 # queryset = Student.objects.filter(name='小美') # queryset...queryset: # print stu.name,stu.cls.id,stu.cls.name # 第二种 : 牛逼的双下划线(跨表),可以用多个双下划线跨多张表 # 语句功能是查询学生表中所有学生的姓名和学生所在班级的名称
外键类型在ORM中用来表示外键关联关系,一般把ForeignKey字段设置在 '一对多'中'多'的一方。 ...ForeignKey可以和其他表做关联关系同时也可以和自身做关联关系。 ---- OneToOneField 一对一字段。通常一对一字段用来扩展已有字段。...机制 GenericIPAddressField(Field) - 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6...---- 元信息 ORM对应的类里面包含另一个Meta类,而Meta类封装了一些数据库的信息。...---- ordering 指定默认按什么字段排序。 只有设置了该属性,我们查询到的结果才可以被reverse()。
前言 ORM 使用 filter() 查询的时候,当有多个条件的时候,可以使用 Q 查询 Q 查询 or 如有个 Card 模型,表里面有以下数据 ?...: 1000000000002222>, ]> >>> 使用 | 和 or 都可以表示或关系 Card.objects.filter(Q(card_user =...'YOYO') or Q(card_user = 'yoyo')) Q查询 and 同时满足2个条件,使用 & 和 and 都可以 MyDjango>python manage.py shell >>...> from yoyo.models import Card >>> from django.db.models import Q >>> >>> Card.objects.filter(add_time...>, ]> >>> Q查询 not Q 对象可以使用~ 操作符取反,这允许组合正常的查询和取反(NOT) 查询 查询 card_user = ‘YOYO’ 并且
ORM 能够把 python语句 自动的翻译 为SQL语句 ORM优点: 1. 简单,不用自己写SQL语句 2....操作数据行 --> 数据的增删改查 不能创建数据库,自己动手创建数据库 使用Django的ORM详细步骤: 1....,去数据库执行 Django ORM常用字段: 1....表单中没有char字段;需要自定义 #自定义char字段 class FixedCharField(models.Field): """ 自定义的char类型的字段类 """ def __init...ORM中的用法 OneToOneField(to="") 举例:作者和作者详情是一对一的;跟一对多,用法相同,只不过detail里面的不能重复;在数据库中也是多一个detail_id 字段 总结
ORM的劣势 ORM的缺点是会在一定程度上牺牲程序的执行效率。 ORM用多了,造成SQL语句就不会写了,关系数据库相关技能退化。 ORM总结 ORM只是一种工具,工具确实能解决一些重复,简单的劳动。...Django支持MySQL5.5及更高版本。 Django中ORM常用的字段和参数 常用的字段 AutoField:int自增型,必须填入参数 primary_key = True 。...就是说关联对象找到这个对象后它是经过排序的。指定这个属性后你会得到一个get_XXX_order()和set_XXX_order()的方法,通过它们你可以设置或者回去排序的对象。...ordering 这个字段是告诉Django模型对象返回的记录结果集是按照哪个字段排序的。...这会在 Django admin 层和数据库层同时做出限制(也就是相关的 UNIQUE 语句会被包括在 CREATE TABLE 语句中)。
ORM的优势 ORM解决的主要问题是对象和关系的映射。它通常把一个类和一个表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。 ...ORM的劣势 ORM的缺点是会在一定程度上牺牲程序的执行效率。 ORM用多了SQL语句就不会写了,关系数据库相关技能退化... 5....二、Django中的ORM 1. Django项目使用MySQL数据库 1....Model 在Django中model是你数据的单一、明确的信息来源。它包含了你存储的数据的重要字段和行为。...Django中ORM快速入门 下面这个例子定义了一个 Person 模型,包含 first_name 和 last_name。
语句打交道,只需简单的操作对象的属性和方法。...同时 ORM 避免了不规范、冗余、风格不统一的 SQL 语句,可以避免很多人为的 bug,方便编码风格的统一和后期维护。...,ORM 可能会生成的效率低下的 SQL 通过 Lazy load 和 Cache 很大程度上改善了性能问题 SQL 调优,SQL 语句是由 ORM 框架自动生成,虽然减少了 SQL 语句错误的发生,但是也给...对象和关系之间并不是完美映射 一般来说 ORM 足以满足我们的需求,如果对性能要求特别高或者查询十分复杂,可以考虑使用原生 SQL 和 ORM 共用的方式 Django ORM 在 Django 框架中集成了...= Blog.objects.filter(title='blog2') q = q.filter(content='blog2') q = q.exclude(id=3) # 执行下面的语句才会真正访问数据库
Q查询 ORM反向生成models ORM常用和非常用字段 ORM字段参数 ORM关系字段 OneToOneField ManyToManyField 多对多关联关系的三种方式...元信息 自定义字段(了解) defer和only 事务操作 -曾老湿, 江湖人称曾老大。...当我们需要对数据库进行操作时,势必需要通过连接数据、调用sql语句、执行sql语句等操作,ORM将数据库中的表,字段,行与我们面向对象编程的类及其方法,属性等一一对应,即将该部分操作封装起来,程序猿不需懂得...和 时间排序 import os if __name__ == '__main__': os.environ.setdefault("DJANGO_SETTINGS_MODULE", "orm.settings...如果你需要执行更复杂的查询(例如OR 语句),你可以使用Q 对象。
django ORM中一对多,和多对多字段正反向查询例子 一对多 在 models.py 上定义: class Province(models.Model): name = models.CharField...Province", to_field='id', on_delete=models.CASCADE) def __str__(self): return self.name 执行语句生成数据库...item in pro_list: print(item.id, item.name, item.city_set.filter(id__lt=5)) # 获取第一个省份和其所有的城市...(models.Model): name = models.CharField(max_length=32) m = models.ManyToManyField('Book') 执行语句生成数据库...return HttpResponse('ok') 插入数据 author: book: author_m: 运行结果: 添加数据,进行查询操作 修改 views.py # 或者作者和其对应的所有著作
08.14自我总结 django-orm框架 一.orm基本配置 1.创建django项目 命令行:cmd先去到django创建目录,然后输入django-admin startproject django...需要在database中进行配置连接mysql的用户名和密码以及数据库 DATABASES = { 'default':{ 'ENGINE':'django.db.backends.sqlite3...from django.db.models import Q res = models.UserInfo.objects.filter(Q(id__gt=3) | Q(name='zekai')) #or...用|链接 有and和or # Q from django.db.models import Q res = models.UserInfo.objects.filter( Q(Q(id__gt=3) |...Q(name='zekai')) & Q(age=23) ) and用&链接 13.F from django.db.models import F models.UserInfo.objects.update
查询 Django ORM可以通过一些方法来实现。其中的很多方法返回的是Django自定义的QuerySet类的迭代器。Python看到迭代器时会懒惰求值,所以这些方法返回时并不会真正进行数据库操作。...我觉得这种情况下,可以直接上原始的SQL查询语句了,没必要再自己折腾自己。 F表达式和Q表达式 F表达式指代了一列,对于update操作时引用列的值有用。...Q表达式代表了WHERE的一个条件,可以用于多个WHERE条件的连接。这些都是Django ORM用来弥补缺陷的。就拿Q表达式来说。查询方法中跟多个参数的话,相当于多个WHERE条件。...为了表达OR和NOT关系,Django ORM就造了个Q表达式,比如: filter(Q(name__contains="abc")|Q(name__startswith("xxx"))) 为了弥补缺陷...但如果需要构建复杂的SQL语句,与其在Django ORM里绕来绕去,还不如直接用原始的SQL语句。这个是我最强烈的一个感受。当然,Django ORM还是可用的工具。
我们使用原生SQL语句,按照部分分组求平均工资: select dept,AVG(salary) from employee group by dept; ORM查询: from django.db.models...过滤器基于所给的参数限制查询的结果,从Sql的角度,查询集和select语句等价,过滤器像where和limit子句。 返回查询集的过滤器如下: all():返回所有数据。...exclude():返回满足条件之外的数据,相当于sql语句中where部分的not关键字。 order_by():对结果进行排序。...save():将模型对象保存到数据表中,ORM框架会转换成对应的insert或update语句。 delete():将模型对象从数据表中删除,ORM框架会转换成对应的delete语句。...Django支持自定义管理器类,继承自models.Manager。
Django Models django 本身提供了非常强大易使用的ORM组件,并且支持多种数据库,如sqllite,mysql,progressSql,Oracle等,当然最常用的搭配还是mysql...当你在Python中处理Unicode对象的时候,你可以直接将它们混合使用和互相匹配而不必去考虑编码细节。 Django 在其内部的各个方面都使用到了 Unicode 对象。...我们还没有告诉数据库 怎样对结果进行排序,所以我们返回的结果是无序的。 在你的 Django 应用中,你或许希望根据某字段的值对检索结果排序,比如说,按字母顺序。...Publisher.objects.order_by("name") [, ] 跟以前的 all() 例子差不多,SQL语句里多了指定排序的部分...连锁查询 我们已经知道如何对数据进行过滤和排序。 当然,通常我们需要同时进行过滤和排序查询的操作。
的manytomany自动帮我们创建第三张表,两种方式建立关系都可以,以后的学习我们暂时用orm自动创建的第三张表,因为手动创建的第三张表我们进行orm操作的时候,很多关于多对多关系的表之间的orm语句方法无法使用...这个例子中的CREATE TABLE SQL 语句使用PostgreSQL 语法格式,要注意的是Django 会根据settings 中指定的数据库类型来使用相应的SQL 语句。...`age`;''' 下面是书籍表和出版社表的一个连表分组的sql语句写法: ?...如果你需要执行更复杂的查询(例如OR 语句),你可以使用Q 对象。...Django 提供两种方法使用原始SQL进行查询:一种是使用raw()方法,进行原始SQL查询并返回模型实例;另一种是完全避开模型层,直接执行自定义的SQL语句。
SQL语句打交道,只需简单的操作对象的属性和方法。...ORM的优劣势 ORM的优势 ORM解决的主要问题是对象和关系的映射。它通常把一个类和一个表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。...ORM的劣势 ORM的缺点是会在一定程度上牺牲程序的执行效率。 ORM用多了SQL语句就不会写了,关系数据库相关技能退化... ORM总结 ORM只是一种工具,工具确实能解决一些重复,简单的劳动。...(相当于用sql语句用join连接的方式,可以在settings里面设置,可查看sql语句) 一对多查询: 练习1、查询人民出版社出版过的所有的书的价格和名字 # 基于双下划线的方式查询1=======...如果你需要执行更复杂的查询(例如OR 语句),你可以使用Q 对象。
领取专属 10元无门槛券
手把手带您无忧上云