我需要在执行某些操作之前将PRAGMA foreign_keys的值更改为“off”,但之后我想将其“打开”。
最终,我刚刚熟悉了ORM,并没有太多时间弄脏SQLAlchemy Core。当我导入我的Declarative模块时,有一个导入确保我的全局引擎已经启动。除此之外,我不接触引擎/池/会话。
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或PRAGMA关闭......
if self.enforceDBFK:
cursor.execute("PRAGMA foreign_keys=ON")
else:
cursor.execute("PRAGMA foreign_keys=OFF")
你如何'取消'这个事件(看起来更干净)?
有关如何执行此操作的任何其他建议。
关于PRAGMA foreign_keys的SQLite文档的注释:
外键约束强制执行只能启用或禁用 当没有待处理的BEGIN或SAVEPOINT时
相关副标题: 在第二个注释中,一旦我找到了PRAGMA,我是否仍然可以使用SQLAlchemy ORM实例来处理表(使用foreign_keys = OFF)? SQLAlchemy本身不强制执行密钥完整性吗?如何让SQLAlchemy暂时忽略外键?
我只需要更新一堆行,但是直到更新作为一个组完成,整个地方都会有破坏/重叠的引用。
答案 0 :(得分:1)
我们目前没有事件“删除”的显式API,尽管这是一个最终可用的功能。所以你需要创建一个单独的事件,它本身会根据一个标志打开和关闭,看起来就像你已经解决过的那样。