【问题标题】:How to turn on 'PRAGMA foreign_keys = ON' in sqlalchemy migration script or configuration file for sqlite?如何在sqlalchemy迁移脚本或sqlite配置文件中打开'PRAGMA foreign_keys = ON'?
【发布时间】:2012-11-22 15:19:11
【问题描述】:

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

【问题讨论】:

    标签: sqlite sqlalchemy alembic


    【解决方案1】:

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

    【讨论】:

    • 谢谢范,我会做测试的。
    【解决方案2】:

    SQLite 没有登录。

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

    【讨论】:

    • 谢谢。这是真的,我需要在某个地方添加此代码。但问题是如何添加它。我会测试的。
    【解决方案3】:

    在 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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      • 2012-03-29
      • 2021-04-06
      相关资源
      最近更新 更多