SqlAlchemy - 数据库Orm

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操作。