,,Python SQLAlchemy入门教程(基本用法)

,,Python SQLAlchemy入门教程(基本用法)

本文主要介绍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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: