SQLAlchemy执行原生INSERT语句无报错但数据未入库问题咨询
问题核心原因
你提供的执行代码中没有实际调用事务提交方法:connection.commit只是引用了方法对象,没有加括号执行调用,事务从未提交,退出连接上下文时会自动回滚,自然不会有数据写入数据库,也不会抛出错误。
修复方案
直接把代码修改为如下即可:
with self.Engine.connect() as connection: connection.execute(Insert_Statement) connection.commit()
相关疑问解答
关于嵌套事务和事务启动逻辑
SQLAlchemy 2.0及以上版本中,通过Engine.connect()获取连接时,默认会自动开启一个根事务,所有在该连接上执行的DML操作都归属这个事务,不存在你怀疑的嵌套事务问题。为什么直接传入字符串SQL无法执行
这是SQLAlchemy 2.0的强制安全规则,所有原生SQL语句必须用text()函数包裹,避免SQL注入风险,属于框架的正常设计。
高性能写入优化建议
针对你高频写入的需求,可以做如下调整进一步提升性能:
- 批量写入时使用
executemany配合参数化查询,比循环单条插入性能高1~2个数量级 - 如果该写入逻辑不需要事务保障,可以开启自动提交模式省略手动提交步骤:
with self.Engine.connect().execution_options(autocommit=True) as connection: connection.execute(Insert_Statement) - 若后续遇到pg8000性能瓶颈,可以尝试安装
psycopg2-binary替代pg8000,之前psycopg2报错大概率是缺少系统编译依赖,binary版本无需编译可直接使用。
内容的提问来源于stack exchange,提问作者Matthew Forth
相关产品推荐
相关产品推荐

