Sqlalchemy异步操作不完全指北#
不完全
抄袭自: 米洛丶 - 博客园 cnblogs.com
异步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)链接参数#
from sqlalchemy.ext.asyncio import create_async_engine
async_engine = create_async_engine(
SQLALCHEMY_DATABASE_URL,
pool_size=10, # 设置最大连接池大小
max_overflow=20, # 设置最大溢出连接数
pool_timeout=30, # 设置获取连接的超时时间(单位:秒)
pool_recycle=1500, # 设置连接回收时间(单位:秒)
echo=True # 设置为True以便于调试,显示SQL日志
)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)建立会话#
我们还是以代码的形式展示:
# 同步
with Session() as session:
# 里面是具体的sql操作
pass
# 异步
async with Session() as session:
# 里面是异步的操作,区别就是从with变成了async with 也就意味着方法必须是async修饰的
pass以上是关于建立连接,处理会话的一些区别,接着我们讲对应的CRUD操作。