Sqlite / SQLAlchemy:如何强制执行外键?新版本的SQLite能够强制执行外键约束,但为了向后兼容,您必须分别为每个数据库连接打开它!sqlite> PRAGMA foreign_keys = ON;我正在使用SQLAlchemy - 我怎样才能确保它始终打开?我试过的是这个:engine = sqlalchemy.create_engine('sqlite:///:memory:', echo=True)engine.execute('pragma foreign_keys=on')......但它不起作用!...我错过了什么?编辑: 我认为我的真正问题是我安装了多个版本的SQLite,并且Python没有使用最新的版本!>>> import sqlite3>>> print sqlite3.sqlite_version3.3.4但我刚刚下载了3.6.23并将exe放在我的项目目录中!我怎样才能弄清楚它正在使用哪个.exe并进行更改?
3 回答
杨__羊羊
TA贡献1943条经验 获得超7个赞
对于最新版本(SQLAlchemy~0.7),SQLAlchemy主页说:
不推荐使用PoolListener。请参阅PoolEvents。
然后CarlS的例子成为:
engine = create_engine(database_url)def _fk_pragma_on_connect(dbapi_con, con_record): dbapi_con.execute('pragma foreign_keys=ON')from sqlalchemy import eventevent.listen(engine, 'connect', _fk_pragma_on_connect)
湖上湖
TA贡献2003条经验 获得超2个赞
基于conny和shadowmatter的答案,这里的代码将在发出PRAGMA语句之前检查您是否使用SQLite3:
from sqlalchemy import eventfrom sqlalchemy.engine import Enginefrom sqlite3 import Connection as SQLite3Connection@event.listens_for(Engine, "connect")def _set_sqlite_pragma(dbapi_connection, connection_record): if isinstance(dbapi_connection, SQLite3Connection): cursor = dbapi_connection.cursor() cursor.execute("PRAGMA foreign_keys=ON;") cursor.close()
添加回答
举报
0/150
提交
取消