本文主要介绍Python SQLACHEMY的入门教程。本文主要通过实例说明Python SQLACHEMY的基本用法。有需要的朋友可以参考一下。
本文将以Mysql为例介绍sqlalchemy的基本用法。其中Python版本为2.7,sqlalchemy版本为1.1.6。
一. 介绍
SQLAlchemy是Python中最著名的ORM工具。
关于ORM:
全称是对象关系映射。
其特点是操纵Python对象而不是SQL查询,即在代码层面考虑对象而不是SQL,体现了一种程序化的思维,使得Python程序更加简洁易读。
具体实现是将数据库表转换成Python类,其中数据列作为属性,数据库操作作为方法。
优势:
简洁易读:将数据表抽象成对象(数据模型),使其更加直观易读。
可移植性:封装多种数据库引擎,面向多个数据库,具有基本相同的操作,易于代码维护。
更安全:有效避开SQL注入
为什么使用sqlalchemy?
虽然性能上略逊于原生SQL,但是操作数据库真的很方便!
二. 使用
概念和数据类型
概念
概念
对应数据库
解释
发动机
连接
驱动发动机
会议
连接池,事务
从而开始查询。
模型
桌子
类别定义
圆柱
排
询问
几行
您可以在链中添加多个条件。
常见数据类型
数据类型
数据库数据类型
Python数据类型
解释
整数
(同Internationalorganizations)国际组织
(同Internationalorganizations)国际组织
塑料,32位
线
可变长字符串
线
字符串
文本
文本
线
采油套管
浮动
漂浮物
漂浮物
浮点型
布尔代数学体系的
tinyint
弯曲件
对/错
日期
日期
日期时间
储存时间、年、月、日
日期时间
日期时间
日期时间.日期时间
存储年、月、日、分、秒、毫秒等。
时间
时间
日期时间.日期时间
存储小时、分钟和秒
创建数据库表
1.装置
pip安装SQLalchemy
2.创建连接
从sqlalchemy导入创建引擎
engine=create _ engine(' MySQL://user:password @ hostname/dbname?charset=uft8 ')
这行代码初始化并创建引擎,引擎在内部维护一个池(连接池)和一个方言(方言)来标识连接的数据库的特定类型。
创建引擎时,已经创建了池和方言,但是此时它们并没有真正连接到数据库。在执行特定语句之前,它们不会连接到数据库。执行connect()。
Create_engine还有其他可选参数,例如:
engine=create _ engine(' MySQL://user:password @ hostname/dbname?charset=uft8 ',
echo=True,
pool_size=8,
pool_recycle=60*30
)
Echo:设置为True时,orm语句将转换为sql语句进行打印,一般在调试时可用。
Pool_size:连接池的大小,默认为5。当设置为0时,连接是无限制的。
Pool_recycle:设置时间来限制数据库自动断开连接的时间。
3. 创建数据库表类(模型)
有了前面提到的ORM的重要特性,我们在操作表的时候,就需要操作对象。现在让我们创建一个类,以通用用户表为例:
从sqlalchemy . ext . declarative import declarative _ base
Base=declarative_base()
类别用户(基本用户):
__tablename__='用户'
id=列(Integer,primary_key=True)
name=Column(字符串(64),unique=True)
email=Column(字符串(64))
def __init__(自己,姓名,电子邮件):
self.name=name
self.email=电子邮件
Declarative_base()是sqlalchemy内部封装的一种方法,通过它构造一个基类,这个基类及其子类可以映射Python类和数据库表。
数据库模型类通过__tablename__与表相关,Column表示数据表的列。
4. 生成数据库表
Base.metadata.create_all(引擎)
创建一个表,如果存在就忽略它,执行上面的代码,你会发现users表已经在db中创建好了。
操作数据
一旦创建了表,它就是操作数据。我们将逐一介绍常见的操作。
会议
sqlalchemy中使用Session来创建程序和数据库之间的会话,所有对象都需要通过session对象进行加载和保存。
通过调用sessionmaker创建工厂,并关联引擎以确保每个会话都可以使用引擎连接资源:
从sqlalchemy.orm导入会话标记
#创建会话
DbSession=session maker(bind=engine)
session=DbSession()
会话的常见操作方法包括:
Flush:预提交,提交到数据库文件,但尚未写入数据库文件。
提交:事务已提交。
回滚:回滚
关闭:关闭
提高
举个最简单的例子:
add_user=Users('test ',' test123@qq.com ')
session.add(add_user)
session.commit()
Session.add()会将模型添加到由当前会话维护的持久空间(可以从session.dirty中看到),直到它被提交到数据库。
Q1:如何在添加后直接返回对象的属性?
可以在add之后执行db.session.flush(),这样就可以在会话中获取对象的属性。
Q2:如何执行批量插入和性能比较?
批量插入有几种方法,它们的批量比较如下:
session . add _ all()bulk _ save _ object()bulk _ insert _ mappings()SQLAlchemy _ core()
支票
查询是最常用的操作。以最简单的查询为例:
users=session.query(Users)。filter_by(id=1)。全部()
对于用户中的项目:
打印(项目.名称)
通常情况下,我们通过上述查询方式获取数据。需要注意的是,通过session.query(),我们查询并返回一个查询对象。这个时候我们还没有查询到具体的数据库。只有当我们执行特定的功能,如。所有()和。首先()我们会真正操作数据库。
其中,query有filter和filter_by两种过滤方式。上面的例子也可以写成:
users=session.query(Users)。filter_by(Users.id==1)。全部()
通常会用到这两种方法,所以一定要掌握它们的区别:
过滤器
Filter_by支持所有比较运算符。只有'=','可用于相等比较。='和''过滤类名。属性名filter属性名不支持组合查询,只能连续调用Filter。伪装的实现参数是**kwargs,支持组合查询,支持and、or和in。
正确的
更新数据有两种方法,一种是在查询中使用update方法:
过滤器
过滤方式
支持所有比较运算符,equal comparison with comparison with==
只有'=','!='和''
过滤类名。属性名
过滤属性名称
不支持组合查询,只能变相连续调用过滤器。
参数是**kwargs,支持组合查询。
支持中的和、或和。
正确的
更新数据有两种方法,一种是在查询中使用update方法:
session.query(用户)。filter_by(id=1)。更新({'name': 'Jack'})
另一种是操作相应的表格模型:
users=session.query(Users)。filter_by(name='Jack ')。首先()
users.name='test '
session.add(用户)
那两种方法呢?一般批量更新时我会选择前者,从查询中获取对象属性后更新场景时需要后者。
删除
与更新数据类似,删除数据有两种方法。第一个是:
delete _ Users=session . query(Users)。filter(Users.name=='test ')。首先()
如果删除_用户:
session.delete(删除用户)
session.commit()
第二种类型:
session.query(用户)。filter(Users.name=='test ')。删除()
session.commit()
第二种建议批量删除。
以上是Python sqlalchemy的基本用法。
代码参考:我的github
总结
以上是边肖介绍的Python SQLAlchemy入门教程。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。非常感谢您对我们网站的支持!
如果你觉得这篇文章对你有帮助,请转载,请注明出处,谢谢!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。