我现在有这个工作:
如上所述下载最新的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)散布。



