orm字段关系映射,哪些框架实现了orm

  orm字段关系映射,哪些框架实现了orm

  ORM是什么?

  ORM是MVC框架的重要组成部分,它实现了数据模型和数据库的解耦,即数据模型不需要依赖于某个特定的数据库,数据库可以通过简单的配置轻松替换。

  ORM是对象关系映射的缩写。其主要任务是:

  根据对象的类型生成表格结构。

  将对象和列表操作转换成SQL语句(或其他数据库的语句)

  将SQL查询的结果转换成对象和列表。

  类名对应-数据库中的表名

  数据库中的类别对应字段。

  类别对应-数据库表中的一行数据。

  ORM的优势:

  ORM让我们常见的数据库交互变得简单易行,根本不用考虑那该死的SQL语句。快速发展,由此而来。

  它可以避免一些程编写sql语句的新手所带来的性能问题。

  如果数据库被迁移,你只需要替换Django的数据库引擎。

  ORM的缺点:

  牺牲了性能,但是现在各种ORM框架都在尝试各种方法,比如缓存,延迟加载,来缓解这个问题。效果显著。

  对于个别复杂的查询,ORM仍然无法做到。为了解决这个问题,ORM一般支持编写原始sql。

  通过QuerySet的查询属性查询对应操作的sql语句

  数据库的配置

  1.默认支持

  Django默认支持sqlite,mysql,oracle,postgresql数据库。默认使用sqlite的数据库,默认使用sqlite的数据库驱动。引擎名为django.db.backends.sqlite3

  2.mysql驱动

  mysdb(MySQL Python)[Python 2中的驱动程序]

  mysqlclient

  关系型数据库

  Pymysql(纯python的mysql驱动程序)[python 3中的驱动程序]

  3.创建数据库

  必须在配置前创建数据库。

  一个

  创建数据库Django _ books charset utf8#创建一个支持中文的数据库

  4.更改项目中settings.py的数据库设置。

  查看代码

  5.配置驱动程序

  Django默认导入的驱动是MySQLdb,对python3的支持有很大问题,应该在__init__中改成PyMySQL:项目名称文件夹下的py:

  一个

  2

  导入pymysql

  告诉Django使用Pymysql驱动程序

  扩展:查看ORM操作执行的原生sql语句,并在settings.py中添加以下内容:

  查看代码

  表(模型)的创建

  例子:作者、书籍和出版商之间的关系

  查看代码

  1.每个数据模型(类)都是django.db.models.Model的子类,其父模型包含了所有与数据库交互的必要方法。

  2.每个类相当于单个数据表,属性名就是字段名。

  字段类型介绍

  查看代码

  3.字段参数介绍

  查看代码

  4.模型之间的关系(表之间)

  有三种关系:一对一、一对多和多对多

  一对一:本质是在master和foreign key关系的基础上,给foreign key增加一个UNIQUE=True属性;一对一(“用户组”)

  一对多:是主键-外键关系;ForeignKeyField(UserGroup ,to_field=gid ,default=1,on_delete=models。级联)

  多对多:ORM会自动为我们创建第三个表(当然我们也可以自己创建第三个表:两个外键););ManyToManyField(“用户组”)

  参数:“用户组”thdyc的另一个表的表名;

  可以省略To_field=gid。默认情况下,另一个表的字段是主键;

  On _ delete=模型。没有这个级联将报告一个错误;

  5.构建完表后,在命令行上执行两条语句来生成映射文件,并将其提交给数据库来构建表。

  一个

  2

  Python manage.py makemigrations在应用程序文件夹中生成映射文件(以000开头的py文件)。

  Python manage.py migrate提交数据库以执行表构建。

  6.修改数据表

  如果您想要修改数据模型并重新执行步骤5,可能会出现以下问题:

  如果新增的字段没有默认值,或者原表中设置的字段不能为空,这里有两种选择:1、设置默认值,2、退出修改。选择1后,输入默认值即可。

  桌子的操作

  一.补充

  添加表格记录

  查看代码

  添加多对多之间的关系

  查看代码

  二。删除

  删除表格记录

  一个

  book . objects . filter(name= python )。delete () #看似删除了一条消息,实际上删除的是book_author表中的数据,这是django默认的级联删除。

  删除多对多之间的关系

  查看代码

  三。修订本

  修改表格数据

  查看代码

  要修改多对多表之间的关系:

  一个

  没有什么特殊的方法可以将remove()和add()结合起来。

  四。打听

  1.查询API:

  查看代码

  扩展查询:有时候Django的查询API无法方便的设置查询条件,提供了另一种扩展查询方法extra()。

  查看代码

  单表模糊查询:(双下划线)

  查看代码

  2.多表thdyc查询:(多对多和一对多没有区别)

  查看代码

  3.3的惯性机制。查询

  所谓惯性机制,models查询语句只返回一个Queryset对象,并不立即执行SQL,只是在使用查询结果时才执行。

  例如,句子:person _ set=person . objects . filter(first _ name= Dave )不运行数据库查询,该查询仅在遍历Queryset、if queryset或呈现模板时执行。

  查询集的特点:迭代、切片和缓存。

  Queryset已缓存。

  当遍历Queryset时,从数据库中检索匹配的记录,然后转换成Django的模型。这些模型会存储在Queryset的内置缓存中,如果再次遍历或使用这个Queryset,就不需要重复查询了。

  但是,如果处理数千条记录,一次性加载内存是非常浪费的。为了避免Queryset缓存,可以使用iterator()方法获取数据,处理后丢弃。

  查看代码

  迭代器不能迭代,这意味着可能会导致额外的重复查询。而缓存用于减少对数据库的查询。所以使用的时候要考虑需求。

  4.聚合查询的分组查询

  从django.db.models导入平均值、最小值、总和、最大值、计数

  查询:aggregate(*args,**kwargs):

  Aggregate()是Queryset的终止子句。通过计算Queryset,它返回聚合值的字典。从整个查询集生成聚合值。

  aggregate()子句的参数描述了我们要计算的聚合值,如average Avg、Sum sum等。

  例如:

  查看代码

  查询:Annotate(www.thd540.com * args,* *夸尔格斯):

  分组查询通常伴随着聚合查询。它可以为查询集的每个项目生成聚合。

  查看代码

  5.f查询和Q查询

  从django.db.models导入F,Q

  查询:是用来更新原始值的函数。

  模特。author . objects . all(www . tianzun yule 178 . com/)。Update (age=f (age) 1) #将所有人的年龄放入作者表1中

  Models.book.objects.all()。Update (price=f (price) 10) #所有图书涨价10元

  q:用于构造复杂的查询条件,比如AND,OR,NOT。

  我们可以使用filter()方法来查询条件。filter()中两个条件之间的关系是and。如果是或者,就只能用Q查询了。

  book . objects . filter(Q(ID=www . tygj 178 . com 1))#查询条件为id=1

  book . objects . filter(Q(price=www . dfg jpt . com 99) ~ Q(name= Python )#查询price=99或name不等于Python的图书

  book . objects . filter(Q(name=www . dfgj 157 . com go ),price=99) # Q查询可以和关键字查询结合使用,但是必须把Q放在前面。

orm字段关系映射,哪些框架实现了orm