Sqlite / SQLAlchemy:如何强制执行外键?

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并进行更改?


眼眸繁星
浏览 640回答 3
3回答

杨__羊羊

对于最新版本(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)

湖上湖

基于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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python