python - SQLite/SQLAlchemy : how to enforce Foreign Keys?

标签 python sqlite foreign-keys 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_version
3.3.4

但是我刚刚下载了3.6.23并将exe放在我的项目目录中! 我怎样才能找出它正在使用哪个.exe,并更改它?

最佳答案

对于最新版本 (SQLAlchemy ~0.7) SQLAlchemy homepage说:

PoolListener is deprecated. Please refer to 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 event
event.listen(engine, 'connect', _fk_pragma_on_connect)

关于python - SQLite/SQLAlchemy : how to enforce Foreign Keys?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53335206/

相关文章:

python - 使用 python map 将列表中的所有 float 替换为 str 类型的圆形 float

python - 如何在终端上显示标志(例如[-h])?

sqlite - 外键不匹配 SQLite

由于外键,MySQL 创建表失败

c# - Entity Framework - 使用外键插入

python - Slack 机器人 : invite a non-bot user when @ mentioning them

python - 如何使用并发.futures 在并行进程中将列表作为参数传递

android - 房间数据库: Multiple delete query crashes app

sqlite - SQLite查询:排序后获取行索引

Android:随着时间的推移将数据库加载到内存与查询