在执行某些操作之前,我需要将 PRAGMA foreign_keys 的值更改为“关闭”,但随后我想将其重新“打开”。
最终,我只是刚刚熟悉了 ORM,并没有太多时间去了解 SQLAlchemy Core。当我导入声明性模块时,有一个导入可以确保我的全局引擎已启动。除此之外,我不接触引擎/池/会话。
from sqlalchemy.engine import Engine
from sqlalchemy import event
@event.listens_for(Engine, "connect")
def set_sqlite_pragma(dbapi_connection, connection_record):
cursor = dbapi_connection.cursor()
cursor.execute("PRAGMA foreign_keys=ON")
cursor.close()
我可以将其粘贴在我的全局引擎配置中,然后使用 PRAGMA on 或 PRAGMA off 的开关...
if self.enforceDBFK:
cursor.execute("PRAGMA foreign_keys=ON")
else:
cursor.execute("PRAGMA foreign_keys=OFF")
你如何“不听”事件(看起来更干净)?
有关如何执行此操作的任何其他建议。
SQLite 文档中关于 PRAGMA foreign_keys 的注释:
只有在没有挂起的 BEGIN 或 SAVEPOINT 时,才能启用或禁用外键约束强制
相关子主题: 第二个注意事项,一旦我弄清楚了 PRAGMA,我还可以使用 SQLAlchemy ORM 实例来处理表(使用 foreign_keys=OFF)吗?SQLAlchemy 本身并不强制执行密钥完整性,对吗?如何让 SQLAlchemy 也暂时忽略外键?
我只需要更新一堆行,但是在更新作为一个组完成之前,整个地方都会有损坏/重叠的引用。