我現在有這方面的工作:
下載最新的SQLite和pysqlite2建立如上文所述:確保正在運行時由Python中正確版本。
import sqlite3
import pysqlite2
print sqlite3.sqlite_version # should be 3.6.23.1
print pysqlite2.__path__ # eg C:\\Python26\\lib\\site-packages\\pysqlite2
下一頁添加PoolListener:
from sqlalchemy.interfaces import PoolListener
class 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添加()事物時,我的導入代碼隱式地處理關係連接,因此永遠不會失敗。在一些ForeignKey()語句中添加'nullable = False'幫助我在這裏。
我測試的SQLAlchemy SQLite的外鍵支持的方式啓用是從一個聲明ORM類做一個手動插入:
# example
ins = Coverage.__table__.insert().values(id = 99,
description = 'Wrong',
area = 42.0,
wall_id = 99, # invalid fkey id
type_id = 99) # invalid fkey_id
session.execute(ins)
這裏wall_id'和「TYPE_ID」都是ForeignKey的()的和如果試圖連接無效的fkeys,sqlite現在會正確拋出異常。所以它的作品!如果您刪除偵聽器,則sqlalchemy會愉快地添加無效條目。
我相信主要的問題可能是多個sqlite3.dll的(或.so)左右。
您是否像我所做的那樣使用PRAGMA? – 2010-04-12 23:10:42
謝謝,我也工作。 事實上,問題是我的機器上有多個SQLite副本......修復這個問題,並使用PoolListener完美工作! – 2010-04-21 21:47:29
它的工作原理!但如何使它與poolevent ... – 42n4 2014-09-12 18:02:24