Python SQLAlchemy INSERT after DELETE违反约束



我使用以下模式删除Postgresql表中的所有行,然后使用SQLAlchemy进行插入:

db = create_engine("postgresql://...", echo=False).connect()
metadata = MetaData(db)
my_table = Table('my_table', metadata, autoload_with=db)
...
db.execute(my_table.delete())
db.execute(my_table.insert(), values)

其中values为列表。

我不明白为什么我在尝试插入时得到psycopg2.errors.UniqueViolation

插入的数据没有重复,所以我猜问题是没有提交删除?

我不使用Session:我需要做什么才能让这个简单的模式正确工作?

我通过使用支持的DBAPIisolation_level="AUTOCOMMIT"完全禁用自动SQLAlchemy事务(在批量删除/插入的情况下不需要)找到了解决方案:

db = create_engine("postgresql://...", echo=False).connect().execution_options(isolation_level="AUTOCOMMIT")

看到https://docs.sqlalchemy.org/en/14/core/connections.html setting-transaction-isolation-levels-including-dbapi-autocommit

最新更新