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/2614984/

相关文章:

python - 基于两个目标对数组进行排序

ruby-on-rails - Rails 中的外键问题

python - 如何删除 pandas 数据框中具有重复列值的行?

python - Django 国家编码没有给出正确的名称

Android 数据库助手单例和同步

Python sqlite3 : UPDATE failure claims "no such column"

mysql - MySQL 错误 1215

CakePHP 2 : Acl tutorial doesn't work

Python 组合条件运算符 : if AA in Y or BB in Y and not B in Y

caching - 为什么 SQLite 不自动将此查询分成两部分?