【发布时间】:2012-11-22 15:19:11
【问题描述】:
在合适的 sqlite 版本中,我们可以通过 'PRAGMA foreign_keys = ON' 来强制执行外键约束。但是,用户无法在每次建立连接时都登录数据库。所以我想知道我们怎样才能让它在 sqlalchemy/alembic 的迁移脚本中工作?非常感谢!
【问题讨论】:
标签: sqlite sqlalchemy alembic
在合适的 sqlite 版本中,我们可以通过 'PRAGMA foreign_keys = ON' 来强制执行外键约束。但是,用户无法在每次建立连接时都登录数据库。所以我想知道我们怎样才能让它在 sqlalchemy/alembic 的迁移脚本中工作?非常感谢!
【问题讨论】:
标签: sqlite sqlalchemy alembic
参见 SA SQLite 文档中的 Foreign Key Support:
import sqlite3
from sqlalchemy.engine import Engine
from sqlalchemy import event
@event.listens_for(Engine, "connect")
def set_sqlite_pragma(dbapi_connection, connection_record):
if type(dbapi_connection) is sqlite3.Connection: # play well with other DB backends
cursor = dbapi_connection.cursor()
cursor.execute("PRAGMA foreign_keys=ON")
cursor.close()
【讨论】:
SQLite 没有登录。
要在脚本中启用外键,只需将PRAGMA foreign_keys = ON 命令添加到该脚本即可。
【讨论】:
在 Alembic 迁移脚本中,您可以使用原始 SQL 来打开外键支持,如下所示:
def upgrade():
from sqlalchemy.orm.session import Session
session = Session(bind=op.get_bind())
session.execute('PRAGMA foreign_keys = ON;')
session.commit()
# Actual migration logic would follow.
【讨论】: