1.9、源码ORM介绍
2.Django中的源码orm是什么(2023年最新解答)
9、ORM介绍
一 Django模型层之ORM介绍
二 ORM的源码使用之模型
三 ORM的使用之数据库迁移
3.1 创建模型
3.2 配置settings.py
3.3 mysqlclient安装与兼容性问题
3.4 数据库迁移命令
3.5 模型字段的增、删、源码改
3.6 加载django配置
四 基本使用简介
Django模型层之ORM介绍一 ORM是源码什么?为何要有ORM?
我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的源码小型网页源码管理操作(增、删、源码改、源码查),源码而一旦谈到数据的源码管理操作,就需要用到数据库管理软件,源码例如mysql、源码oracle、源码Microsoft SQL Server等。源码
如果应用程序需要操作数据(比如将用户注册信息永久存放起来),源码那么我们需要在应用程序中编写原生sql语句,然后使用pymysql模块远程操作mysql数据库
针对应用程序的数据操作,直接编写原生sql语句会存在两方面的问题,严重影响开发效率,如下
为了解决上述问题,django引入了ORM的概念,ORM全称Object Relational Mapping,即对象关系映射,免费棋牌源码搭建是在pymysq之上又进行了一层封装,对于数据的操作,我们无需再去编写原生sql,取代代之的是基于面向对象的思想去编写类、对象、调用相应的方法等,ORM会将其转换/映射成原生SQL然后交给pymysql执行
基于图2所示,有了ORM框架,开发人员既不用再去考虑原生SQL的优化问题,也不用考虑数据库迁移的问题,ORM都帮我们做了优化且支持多种数据库,这极大地提升了我们的开发效率,下面就让我们来详细学习ORM的使用吧
二 ORM的使用之模型
在django的ORM框架中,继承自django.db.models.Model的类称之为模型类,或简称模型。
一个模型是关于你的数据,唯一的、决定性的信息源、它包含存储数据的基本字段和方法。
通常,每个模型都映射到一个数据库表。模型中的openstack swift源码下载属性对应数据库表的字段
如下所示:原生SQL与ORM的模型对应关系
三 ORM的使用之数据库迁移
3.1 创建模型
数据来源于数据库的表,而ORM的模型类对应数据库表,所以若我们想操作数据,必须先创建模型。
3.2 配置settings.py
3.2.1 注册应用
但凡涉及到数据库同步操作的应用,都需要事先在settings.py的INSTALLED_APPS中完成注册
3.2.2 配置后端数据库
django的orm支持多种数据库(如PostgreSQL、MySQL、SQLite、Oracle等),如果想将上述模型转为mysql数据库中的表,需要settings.py中配置DATABASES,如下
强调!!!:在链接mysql数据库前,必须事先创建好数据库
3.2.3 配置日志
如果想打印orm转换过程中的sql,需要在settings中进行配置日志:
3.3 mysqlclient安装与兼容性问题
首先执行下述命令来创建一个迁移
会抛出异常
提示我们需要事先安装好mysqlclient,并且默认加载的mysqlclient是模块MySQLdb,需要安装MySQL-python,但目前python官方第三库中最新版MySQLdb 1.2.5对python解释器以及MySQL Server的支持如下,并不支持python3.0+
为此,有人在github中创建了一个 MySQLdb1分支 来支持Cpython3.0+解释器,可以参照官网进行安装 pypi.org/project/mysqlc...
除了使用MySQLdb作为MySQLclient之外,php个性qq源码我们还有可以使用pymysql
比起前者,pymysql直接支持Cpython3.0+,安装简单
但是因为Django默认加载的MySQLclient是MySQLdb,所以需要作出修改
此时重新执行python manage.py makemigrations仍会抛出异常
需根据上述异常提示的文件base.py路径打开文件,注释下述两行
如果重新执行makemigrations命令,扔抛出异常
需根据上述异常提示的operations.py文件路径打开文件,把行的decode修改为encode
ps:PyPI(Python Package Index)是Python官方的第三方库,所有人都可以下载或上传Python库到PyPI。可以访问 pypi.org/,自行查看各个库的版本支持,
3.4 数据库迁移命令
最后在命令行中执行两条数据库迁移命令,即可在指定的数据库db1中创建表 :
注意:当我们直接去数据库里查看生成的表时,会发现数据库中的表与orm规定的并不一致,这完全是正常的,事实上,orm的字段约束就是不会全部体现在数据库的表中,比如我们为字段gender设置的默认值default=1,去数据库中查看会发现该字段的default部分为null
,虽然数据库没有增加默认值,但是我们在使用orm插入值时,完全为gender字段插入空,orm会按照自己的约束将空转换成默认值后,再提交给数据库执行
3.5 模型字段的增、删、改
在表生成之后,php源码加密软件如果需要增加、删除、修改表中字段,需要这么做
3.6 加载django配置
在开发django项目时,如果我们想跳过django的启动与操作流程,只测试某一部分的代码的功能,需要首先引入django的配置环境才可以
四 基本使用简介
增加一条记录
查询记录
修改记录
删除记录
Django中的orm是什么(年最新解答)
导读:今天首席CTO笔记来给各位分享关于Django中的orm是什么的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!Django的orm中get和filter的不同Django的orm中get和filter的不同
get得到的是一个model对象,filter得到的是一组model对象,类型是queryset,是一个django定义的,可迭代的,可以当作是一个list操作,每个索引都是一个model对象。get如果满足的条件大于一个的时候,会报错#有点类似于如下:get相当与fetchone()filter相当与fetchall()
djangoorm和tornadoorm有什么区别
Tornado是异步框架
Tornado基本上只算有MVC中C这一层,而Django是大而全
所以一般Django适合初学者或者小团队,Tornado适合高度定制。
Django框架是什么?Django是基于Python的免费和开放源代码Web框架,它遵循模型-模板-视图(MTV)体系结构模式。它由DjangoSoftwareFoundation(DSF)维护,这是一个由非营利组织成立的独立组织。
Django的主要目标是简化复杂的,数据库驱动的网站的创建。该框架强调组件的可重用性和“可插入性”,更少的代码,低耦合,快速开发以及不重复自己的原则。整个过程都使用Python,甚至用于设置文件和数据模型。Django还提供了一个可选的管理创建,读取,更新和删除界面,该界面通过自省动态生成并通过管理模型进行配置。
一些使用Django的知名网站包括公共广播服务,Instagram,Mozilla,华盛顿时报,Disqus,Bitbucket,和Nextdoor。
Django创建于年秋天,当时《劳伦斯日报》世界报纸的网络程序员AdrianHolovaty和SimonWillison开始使用Python来构建应用程序。西蒙·威利森(SimonWillison)的实习期结束前不久,雅各布·卡普兰·莫斯(JacobKaplan-Moss)在Django的发展中就被聘用了。它于年7月在BSD许可下公开发布。该框架以吉他手DjangoReinhardt的名字命名。年6月,宣布新成立的Django软件基金会(DSF)将来将维护Django。
年7月,与一些Django联合创始人和开发人员建立联系的软件咨询公司RevolutionSystems在劳伦斯举办了周年纪念活动。
Django的设计理念如下:
松耦合——Django的目标是使堆栈中的每个元素彼此独立。
更少的编码——更少的代码,因此可以快速开发。
不重复自己(DRY)——一切都应该只在一个地方开发,而不是一次又一次地重复。
快速开发——Django的理念是尽一切可能促进超快速开发。
简洁的设计——Django严格按照自己的代码维护简洁的设计,并易于遵循最佳的Web开发实践。
Django的一些优势如下:
对象关系映射(ORM)支持——Django在数据模型和数据库引擎之间建立了桥梁,并支持包括MySQL,Oracle,Postgres等在内的大量数据库系统。
多语言支持——Django通过其内置的国际化系统支持多语言网站。因此,您可以开发支持多种语言的网站。
框架支持——Django内置了对Ajax,RSS,缓存和其他各种框架的支持。
GUI——Django为管理活动提供了一个很好的即用型用户界面。
开发环境——Django带有轻量级的Web服务器,以促进端到端应用程序的开发和测试。
Django是PythonWeb框架。和大多数现代框架一样,Django支持MVC模式。
关于Python的基础问题可以看下这个网页的视频教程,网页链接,希望我的回答能帮到你。
djangoorm创建数据表Django里面,管理数据库和sqlarchemy类似,也是通过orm框架来实现的。所有的数据库的建立,都是在model.py里面通过类来实现的。
首先看看如何创建一个单表:
a.先定义一个类,继承models.Model,然后根据需求定义参数,这些参数的类型和变量后面会进一步阐述
models.py
from?django.db?import?models
class?UserInfo(models.Model):
username?=?models.CharField(max_length=)
password?=?models.CharField(max_length=)
b.注册app
settings.py
INSTALLED_APPS?=?[
‘django.contrib.admin‘,
‘django.contrib.auth‘,
‘django.contrib.contenttypes‘,
‘django.contrib.sessions‘,
‘django.contrib.messages‘,
‘django.contrib.staticfiles‘,
‘app‘,
]
c.执行命令。第一条命令会生成一个初始化文件,第二个命令会生成对应的表
python?manage.py?makemigrations
python?manage.py?migrate
这样,就在PyCharm自带的sqlite数据库里面成功的生成了一个app_UserInfo的表。这个表默认会有一个自增的id作为主键,另外两个字段是我们通过类创建的。
d.如果希望使用mysql,因为Django默认使用了MySqldb模块,这个在3.0版本里面不存在,会直接报错。我们需要改为pymysql的模块,方法如下:
在project同名文件夹下的__init__文件中添加如下代码即可:
importpymysql
pymysql.install_as_MySQLdb()
2.对于单表的增删改查询
查询
获取所有结果,获取到的结果是一个QuerySet的类似列表的对象,每一个元素本身又是一个对象,包括了id,name,password等属性。
obj?=?models.UserInfo.objects.all()
QuerySet[UserInfo:UserInfoobject,UserInfo:UserInfoobject,UserInfo:UserInfoobject,UserInfo:UserInfoobject,UserInfo:UserInfoobject]
可以通过filter进行过滤,相当于sql的where语句,因为结果也是QuerySet,因此需要再使用first()获取第一个值
obj?=?models.UserInfo.objects.filter(id=nid).first()
增加
models.UserInfo.objects.create(username=u,password=p,user_group_id=3)
删除,可以在filter的基础上进行删除
models.UserInfo.objects.filter(id=nid).delete()
修改,有两种常见方式
第一个方式
models.UserInfo.objects.filter(id=nid).update(username=u,password=p)
第二个方式
obj=models.UserInfo.objects.filter(id=nid)
obj.username=u
obj.save()
如何在django系统外使用django的ORMsqlalchemy使用上有两个层次,1是使用sqlexpression,说白可以让你用python写sql,2是它的orm,orm是使用session的,自行管理session生存期,自行在多个过程中传递session,自行管理事务。写法上是通常的transactionscript(java常说的贫血的domainmodel)模式。实际编码通常1和2混合编程。
django通过中间件部分隐藏了连接/事务管理的概念,写法上也比较简单,接近java常说的充血的domainmodel.内容上也没有sqlalchemy的sqlexpression层次。易用性就体现出来了。
不过用过的orm中,能达到sqlalchemy这样高度的orm,还没有在其他语言中看到。ruby有sequal,java的jooq都有部分sqlalchemy思想的影子。
结语:以上就是首席CTO笔记为大家整理的关于Django中的orm是什么的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于Django中的orm是什么的相关内容别忘了在本站进行查找喔。