You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flask+SQLAlchemy 2.1中为PostgreSQL开启原生自动提交模式

解决方案

完全可以在当前版本限制下开启PostgreSQL原生自动提交,无需升级Flask-SQLAlchemy依赖,也无需修改现有依赖db对象的业务代码,有两种可选实现方案:


方案1:修改引擎默认执行选项(推荐)

直接在db初始化完成后修改引擎级别的隔离级别,该配置会作用于所有从连接池取出的连接,是PostgreSQL驱动层面的原生自动提交,无额外性能开销。
修改后的register_extensions函数代码如下:

def register_extensions(app):
    db.init_app(app)
    # 新增如下代码,设置引擎原生自动提交
    db.engine = db.engine.execution_options(isolation_level="AUTOCOMMIT")
    with app.app_context():
        db.create_all()

同时可以删除原来无效的session_options={'autocommit': True}参数和不生效的SQLALCHEMY_ENGINE_OPTIONS配置项。


方案2:数据库连接URI追加参数

如果不想修改初始化逻辑,也可以直接在数据库连接URI中添加psycopg2驱动的autocommit参数,驱动创建连接时会自动开启原生自动提交:

app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+psycopg2://localhost/etc?autocommit=True'

配置验证方法

可以通过如下代码验证原生自动提交是否生效:

with app.app_context():
    res = db.session.execute("SHOW autocommit").scalar()
    print(res) # 输出为on则代表原生自动提交已开启

显式事务使用方式

开启全局原生自动提交后,需要执行事务操作时,只需显式开启事务即可,不受全局自动提交配置影响:

# 增删改事务示例
with db.session.begin():
    # 此处代码运行在显式事务中,出错会自动回滚
    db.session.add(new_obj)
    db.session.delete(old_obj)

事务执行完成后,连接会自动回到默认的原生自动提交状态。


内容的提问来源于stack exchange,提问作者Kitserve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:27:03