Sqlalchemy异步操作
异步SQLAlchemy
SQLAlchemy作为一款通用的Python Orm工具,在最近的版本也支持了异步操作。但网上很多资料都不是很齐全,API也不是很好查询的情况下,我便有了整理一份基础文档的想法。文章主要会以CRUD为入口,解决大家最基本的需求。
engine的区别
在普通的SQLAlchemy中,建立engine对象,我们会采用下面的方式:
from sqlalchemy import create_engine
engine = create_engine(SQLALCHEMY_DATABASE_URI, pool_recycle=1500)而异步的方式如下:
from sqlalchemy.ext.asyncio import create_async_engine
async_engine = create_async_engine(ASYNC_SQLALCHEMY_URI, pool_recycle=1500)session的区别
我们一般用sessionmaker来建立session,不过异步的有点区别:
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import sessionmaker
# 同步session
Session = sessionmaker(engine)
# 异步session 区别在于需要指定对应的class_
async_session = sessionmaker(async_engine, class_=AsyncSession)建立会话
我们还是以代码的形式展示:
以上是关于建立连接,处理会话的一些区别,接着我们讲对应的CRUD操作。
查询
这里依旧会给出新老版本的对比:
新增
这里开始就只讲异步的操作了。
先说一下session.begin,这个你可以理解为一个事务操作,当采用session的begin方法后,你可以发现我们不需要调用commit方法也能把修改存入数据库。
expunge方法,是用例释放这个实例,SQLAlchemy有个特点,当你的session会话结束以后,它会销毁你插入的这种临时数据,你再想访问这个data就访问不了了。所以我们可以释放这个数据。(expunge的作用)
编辑
一般编辑有2种方式:
查询出对应的数据,在数据上修改
根据key-value的形式,修改对应数据的字段
删除
删除的话,软删除大家都是update,所以不需要多说,物理删除的话,也有两种方式:
查到以后删除之
直接根据条件删除(这种我没有仔细研究,我选的是第一种方式,容错率高点)
Last updated