当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): all():返回所有数据。 filter():返回满足条件的数据。 exclude():返回满足条件之外的数据。...对查询集可以再次调用过滤器进行过滤,如 BookInfo.objects.filter(bread__gt=30).order_by('bpub_date') 从SQL的角度讲,查询集与select语句等价...1>惰性执行 创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用 例如,当执行如下语句时,并未进行数据库查询,只是创建了一个查询集qs qs = BookInfo.objects.all...等同于sql中的limit和offset子句。...qs = BookInfo.objects.all()[0:2] 管理器manager 自定义manager 注意:一旦为模型类指明自定义的过滤器后,Django不再生成默认管理对象objects。
在django中,可以使用模型管理器的raw方法来执行select语句进行数据查询 语法: MyModel.objects.raw(sql语句,[拼接参数]) 用法 MyModel.objects.raw...包中,使用前需要先导入 如: from django.db import connection 用创建 cursor 类的构造函数创建 cursor 对象,再使用 cursor 对象,为保证在出现异常时能释放...cur.execute('执行SQL语句', '拼接参数') 示例 # 用SQL语句将id 为 10的 书的出版社改为 "XXX出版社" from django.db import connection...类型的记录,不便于阅读和判断 在用户自定义的模型类中可以重写 方法解决显示问题,如: 在 自定义模型类中重写 str(self) 方法返回显示文字内容: class Book(models.Model...Django模拟SQL约束ON DELETE CASCADE的行为,并删除包含ForeignKey的对象。
settings.py 公有配置和自定义配置 配置项格式例: BASE_DIR = ‘xxxx’ 公有配置:Django官方提供的基础配置 自定义配置满足命名规则,并尽量个性化 项目的绝对路径...__str__方法,自定义QuerySet中的输出格式,则输出时能输出格式化字符串。...(is_active),默认是True;执行删除时,将欲删除数据的is_active置为False。...注意:使用伪删除时,确保显示数据的地方,均添加了is_active=True的过滤查询。...SQL注入问题: 使用原生语句,使用拼接参数的方式进行查询能适当避免SQL注入问题。
限制查询集 可以对查询集进行取下标或切片操作,等同于sql中的limit和offset子句。 注意:不支持负数索引。 对查询集进行切片后返回一个新的查询集,不会立即执行查询。...通过对象执行关联查询 在定义模型类时,可以指定三种关联关系,最常用的是一对多关系,如本例中的"图书-英雄"就为一对多关系。...hero.hbook 通过模型类执行关联查询- 由多模型类条件查询一模型类数据: 语法如下: 关联模型类名小写__属性名__条件运算符=值 如果没有"__运算符"部分,表示等于,结果和sql中的inner...当没有为模型类定义管理器时,Django会为每一个模型类生成一个名为objects的管理器,自定义管理器后,Django不再生成默认管理器objects。...自定义管理器类主要用于两种情况: 1.修改原始查询集,重写all()方法 2.向管理器类中添加额外的方法,如向数据库中插入数据。 1.修改原始查询集,重写all()方法。
查看、编辑和删除记录:点击列表中的记录,可以查看详细信息并进行编辑或删除操作。 通过这一章的学习,你将对Django Admin有基本的了解,并能够开始使用它来管理你的数据模型。...替换默认用户模型:在settings.py中设置AUTH_USER_MODEL指向自定义用户模型。 自定义字段:可以在自定义用户模型中添加额外的字段,如手机号码、地址等。...链式调用:QuerySet支持链式调用,可以在一个语句中执行多个查询操作。 惰性执行:QuerySet是惰性执行的,这意味着它们在真正需要数据时才会执行查询。...代码审查:检查代码中的瓶颈,如数据库查询优化、缓存使用、I/O操作等。 数据库优化:如索引优化、查询优化、减少数据冗余等。 代码重构:减少不必要的计算和复杂的逻辑,提高代码执行效率。 2....防止常见安全漏洞 SQL注入:使用参数化查询或预编译语句,避免直接拼接用户输入。
: 根据对象的类型生成数据库表结构 将对象、列表的操作,转换为sql语句 将sql查询到的结果转换为对象、列表 Django中的模型包含存储数据的字段和约束,对应着数据库中唯一的表 ORM.png 2....Django模型类开发流程 在models.py中定义模型类,要求继承自models.Model 把应用加入settings.py文件的installed_app项 生成迁移文件 执行迁移生成表 使用模型类进行...定义模型类 在模型中定义属性,会生成数据库表中的字段 django根据属性的类型确定以下信息: 当前选择的数据库支持字段的类型 渲染管理表单时使用的默认html控件 在管理站点最低限度的验证 django...Django的模型进行数据库的查询操作的接口,Django应用的每个模型都拥有至少一个管理器 自定义管理器类主要用于两种情况 向管理器类中添加额外的方法创建管理器对象保存数据到数据库 class TestInfoManager...模型类的查询 查询集表示从数据库中获取的对象集合 查询集可以含有零个、一个或多个过滤器 过滤器基于所给的参数限制查询的结果 从Sql的角度,查询集和select语句等价,过滤器像where和limit子句
按照之前的方式来进行开发就会出现程序员会在自己的业务逻辑代码中夹杂很多SQL语句用来增加、读取、修改、删除相关数据,而这些代码通常都是重复的。 3....Django中ORM快速入门 下面这个例子定义了一个 Person 模型,包含 first_name 和 last_name。...SQL # 更高灵活度的方式执行原生SQL语句 # from django.db import connection, connections # cursor = connection.cursor(...2. select_related使用SQL的JOIN语句进行优化,通过减少SQL查询的次数来进行优化、提高性能。...def prefetch_related(self, *lookups) 性能相关:多表连表操作时速度会慢,使用其执行多次SQL查询在Python代码中实现连表操作。
Django 为我们提供了一种更简单的操作数据库的方式。 在 Django 中,模型(Model)是用来定义数据库结构的类。每个模型类通常对应数据库中的一个表,类的属性对应表中的列。...迁移用于同步数据库模式和 Django 模型的定义。之后对数据库做完的所有操作,最后都要执行“生成迁移文件”和“迁移数据库”这两项操作。 执行数据库迁移的步骤 1....在没有定义自己的模型之前,也能执行数据库迁移,这是因为 Django自带了一些默认的应用程序(如认证系统、会话管理、站点管理等),这些应用程序依赖于一些数据库表。...这些表的迁移文件已经包含在 Django框架中,当执行迁移时,Django会为这些默认应用程序创建必要的数据库表。 创建模型 在创建模型之前我们需要知道这个模型属于哪一个应用下的。...这里传入的第一个参数是要关联的外键的模型;第二个 on_delete=models.CASCADE 表示关联删除,当用户被删除时,对应的文章也会一起被删除。
中定义路由时,通常以斜线/结尾,其好处是用户访问不以斜线/结尾的相同路径时, Django会把用户重定向到以斜线/结尾的路径上,而不会返回404不存在。...Cookie基于域名安全,不同域名的Cookie是不能互相访问的,如访问itcast.cn时向浏览器中写了Cookie信息,使用同一浏览器访问baidu.com时, 无法访问到itcast.cn...request.session.flush() 删除session中的指定键及值,在存储中只删除某个键及对应的值。...自定义管理器 我们可以自定义管理器,并应用到我们的模型类上。...注意:一旦为模型类指明自定义的过滤器后,Django不再生成默认管理对象objects。 自定义管理器类主要用于两种情况: 1.
上一篇Django 2.1.7 模型的关联 讲述了关于Django模型一对多、多对多、自关联等模型关系。...area_obj = models.Manager() # 自定义模型管理对象 class Meta: db_table = 'AREA' # 设置表名为 AREA 使用自定义的模型管理类对象来进行查询如下...将某些固定的查询写到模型管理类中,避免重复编写。 自定义管理器类主要用于两种情况: 1.修改原始查询集,重写all()方法 2.向管理器类中添加额外的方法,如向数据库中插入数据。...return super().all().filter(is_delete=False) # 设置只返回未删除的数据 b)在模型类MiddlewareInfo中定义管理器 class...2.在管理器类中定义创建对象的方法 对模型类对应的数据表进行操作时,推荐将这些操作数据表的方法封装起来,放到模型管理器类中。
上一篇Django 2.1.7 模型的关联讲述了关于Django模型一对多、多对多、自关联等模型关系。...area_obj = models.Manager() # 自定义模型管理对象 class Meta: db_table = 'AREA' # 设置表名为 AREA 使用自定义的模型管理类对象来进行查询如下...将某些固定的查询写到模型管理类中,避免重复编写。 自定义管理器类主要用于两种情况: 1.修改原始查询集,重写all()方法 2.向管理器类中添加额外的方法,如向数据库中插入数据。...return super().all().filter(is_delete=False) # 设置只返回未删除的数据 b)在模型类MiddlewareInfo中定义管理器 class...2.在管理器类中定义创建对象的方法 对模型类对应的数据表进行操作时,推荐将这些操作数据表的方法封装起来,放到模型管理器类中。
models本身没有什么需要多说的,Django 使用了一套直观的系统:一个模型类代表一张数据表,一个模型类的实例代表数据库表中的一行记录。 模型类的save方法可以插入,更新,删除数据。...在Django中,模型的Manager提供了接口,它赋予了 Django 模型操作数据库的能力。默认情况下,Django 为每个模型类添加了一个名为 objects 的 Manager。...people = models.Manager() # 自定义名为people的管理器 使用这个实例模型时, Person.objects 会产生一个 AttributeError 异常,而 Person.people.all...在Django的文档中,明确的告诉了开发者,什么时候QuerySet被执行。因为这影响到SQL执行效率。...字段查找 由于字段查询非常多,也非常常用,本文不进行说明。请直接参考Django字段查询 参考资料: 执行查询 QuerySet API参考 管理器
(默认情况下Django 会自动对 views.py 传到HTML文件中的标签如跳转标签, script标签语法进行转义,令其语义失效)。..., 它可以帮助用户进行数据库的连接访问, 同时更重要的是可以让用户不是通过写sql语句查询数据, 而是通过类和对象的函数方法完成对数据库的操作。...2、SQL 语句通过 pymysql 传送到数据库服务端。 3、在数据库中执行 SQL 语句并将结果返回。...Django真正做的任务是生成数据库操作的语句, 然后交给pymysql这些外模块, 让它们去跟数据库进行真正的连接和执行查询语句, 然后返回得到的数据交回到Django, Django再通过内部的方法对结果进行处理分配到具体对象的一些属性当中...().delete() return HttpResponse("删除成功") 所以实际上删除操作就是通过查询操作获得一些元组后使用delete()函数就是删除数据。
Python 内置函数来实现:如 help(),dir(),type(),id(),hasattr()等。...这就是为什么在模型类中同时定义了模型所代表的数据和有关该模型的信息(其可读名称,默认排序等选项)的原因;了解给定模型所需的所有信息都应存储在模型中。...三、数据库层面: 1、SQL效率提升 应该尽可能少地执行 SQL 语句,并且在内部优化语句。这就是开发人员需要 save() 显式调用的原因,而不是框架无声地将事情隐藏在后台。...3、可以执行原始 SQL 数据库 API 应该意识到这是一个捷径,但并不是所有问题的终结。框架应使编写自定义 SQL(整个语句)或仅将自定义WHERE子句变得更容易实现。...Django 希望模板作者可以轻松地直接编辑HTML。 6、明显地对待空白 模板系统不应使用空格执行魔术操作。如果模板包含空白,则系统应在处理文本时将其视为空白–仅显示它。
模型实例参考 该文档详细描述模型 的API。它建立在模型 和执行查询 的资料之上, 所以在阅读这篇文档之前,你可能会想要先阅读并理解那两篇文档。...我们将用执行查询中所展现的 博客应用模型 来贯穿这篇参考文献。...在Django 1.5 和更早的版本中,在设置主键的值时,Django 会作一个 SELECT。如果SELECT 找到一行,那么Django 执行UPDATE,否则执行INSERT。...它只在数据库中删除这个对象;其Python 实例仍将存在并持有各个字段的数据。 更多细节,包括如何批量删除对象,请参见删除对象。 如果你想自定义删除的行为,你可以覆盖delete() 方法。...这两个方法都将使用模型默认的管理器来执行查询。如果你需要使用自定义的管理器或者你需要自定义的筛选,这个两个方法还接受可选的参数,它们应该用字段查询 中提到的格式。
定义模型 创建APP Django规定,如果要使用模型,必须要创建一个app。...命令操作步骤 表名组成结构为:应用名_类名(如:TestModel_test)。 注意:尽管我们没有在models给表设置主键,但是Django会自动添加一个id作为主键。...save 函数,相当于SQL中的INSERT: # -*- coding: utf-8 -*- from django.http import HttpResponse from TestModel.models...all()获得所有数据行,相当于SQL中的SELECT * FROM list = Test.objects.all() # filter相当于SQL中的WHERE,可设置条件过滤结果...删除数据库中的对象只需调用该对象的delete()方法即可: # -*- coding: utf-8 -*- from django.http import HttpResponse from
按照之前的方式来进行开发就会出现程序员会在自己的业务逻辑代码中夹杂很多SQL语句用来增加、读取、修改、删除相关数据,而这些代码通常都是重复的。...本示例中的CREATE TABLE SQL使用PostgreSQL语法进行格式化,但值得注意的是,Django会根据配置文件中指定的数据库后端类型来生成相应的SQL语句。...on_delete: 当删除关联表中的数据时,当前表与其关联的行的行为。...在数据库中通过第三张表来建立关联关系。 字段参数 to:设置要关联的表; related_name:反向操作时,使用的字段名,用于代替原反向查询时的'表名_set'(同ForeignKey字段)。...默认值为True,这个选项为True时Django可以对数据库表进行 migrate或migrations、删除等操作。
在django.db.models中包含了可选的常量,常用的有三种: a.CASCADE级联,删除主表数据的时候,连同删除外键表中的数据。这个就有点狠了,按需求慎用。...c.SET_NULL设置为 NULL,代表的是主表删除数据的时候,将外键关联的表数据设置为NULL。仅仅在该字段null=True,允许为null时可用。...2. related_name related_name是在定义模型类时,外键的一个选项。它的功能下面慢慢给大家分析一下。...-h172.16.179.139 meiduo_mall < areas.sql; 要想上面的命令将来可以被多次执行,可以将上面的命令写入一个 .sh文件中,在文件的首行必须指定一行命令: #!...团队开发注意事项 浅谈密码加密 Django框架中的英文单词 Django中数据库的相关操作 DRF框架中的英文单词
1)save 通过创建模型类对象,执行对象的save()方法保存到数据库中。...查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。 当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): all():返回所有数据。...2 两大特性 1)惰性执行 创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用 例如,当执行如下语句时,并未进行数据库查询,只是创建了一个查询集qs qs...等同于sql中的limit和offset子句。...对查询集进行切片后返回一个新的查询集,不会立即执行查询。 示例:获取第1、2项,运行查看。 qs = BookInfo.objects.all()[0:2] ?
执行查询 一旦你建立好数据模型之后,django会自动生成一套数据库抽象的API,可以让你执行增删改查的操作。这篇文档阐述了如何使用这些API。关于所有模型检索选项的详细内容,请见数据模型参考。...你可以一直添加过滤器,在这个过程中,Django 不会执行任何数据库查询,除非 QuerySet 被执行....在 Django 删除对象时,会模仿 SQL 约束 ON DELETE CASCADE 的行为,换句话说,删除一个对象时也会删除与它相关联的外键对象。...建议的方式是在你的 model 自定义方法或是自定义 model 的 manager 方法来运行查询。虽然 Django 不要求数据操作必须在 model 层中执行。...详情请查看 执行原生SQL查询(Performing raw SQL queries). 最后,要注意的是,Django的数据操作层仅仅是访问数据库的一个接口。
领取专属 10元无门槛券
手把手带您无忧上云