3

在合适的 sqlite 版本中,我们可以通过 'PRAGMA foreign_keys = ON' 强制执行外键约束。但是,用户每次建立连接时都无法登录数据库。所以我想知道我们怎样才能让它在 sqlalchemy/alembic 的迁移脚本中工作?非常感谢!

4

3 回答 3

7

请参阅SA SQLite 文档中的外键支持

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()
于 2012-12-05T08:44:49.630 回答
0

SQLite 没有登录名。

要在脚本中启用外键,只需将PRAGMA foreign_keys = ON命令添加到该脚本。

于 2012-12-05T08:38:41.453 回答
0

在 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.
于 2021-04-19T13:54:53.993 回答