为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

眼眸繁星 2019-08-08 16:23:32
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)


查看完整回答
反对 回复 2019-08-08
?
湖上湖

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()


查看完整回答
反对 回复 2019-08-08
  • 3 回答
  • 0 关注
  • 639 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信