SQLiteSQLAlchemy:如何强制执行外键?

SQLiteSQLAlchemy:如何强制执行外键?,第1张

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

我现在有这个工作:

如上所述下载最新的sqlite和pysqlite2版本:确保python在运行时使用了正确的版本。

import sqlite3   import pysqlite2 print sqlite3.sqlite_version   # should be 3.6.23.1print pysqlite2.__path__       # eg C:\Python26\lib\site-packages\pysqlite2

接下来添加一个PoolListener:

from sqlalchemy.interfaces import PoolListenerclass ForeignKeysListener(PoolListener):    def connect(self, dbapi_con, con_record):        db_cursor = dbapi_con.execute('pragma foreign_keys=ON')engine = create_engine(database_url, listeners=[ForeignKeysListener()])

然后要小心如何测试外键是否起作用:我在这里有些困惑。当使用sqlalchemy
ORM进行

add()
处理时,我的导入代码将隐式处理关系连接,因此永远不会失败。添加
nullable=False
一些
ForeignKey()
说明对我有帮助。

我测试sqlalchemy sqlite外键支持已启用的方法是从声明性ORM类进行手动插入:

# exampleins = Coverage.__table__.insert().values(id = 99,   description = 'Wrong',   area = 42.0,   wall_id = 99,  # invalid fkey id   type_id = 99)  # invalid fkey_idsession.execute(ins)

这里

wall_id
type_id
都是
ForeignKey()
的,如果试图联播无效fkeys
sqlite的正确,现在抛出异常。这样就行了!如果删除侦听器,则sqlalchemy将愉快地添加无效的条目。

我认为主要问题可能是多个sqlite3.dll(或.so)散布。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5617345.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-15
下一篇2022-12-15

发表评论

登录后才能评论

评论列表(0条)

    保存