大佬教程收集整理的这篇文章主要介绍了SQLite / SQLAlchemy:如何强制执行外键?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我现在有这个工作:
如上所述下载最新的sqlite和pysqlite2版本:确保python在运行时使用了正确的版本。
import sqlite3
import pysqlite2
print sqlite3.@R_416_5607@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进行add()
处理时,我的导入代码将隐式处理关系连接,因此永远不会失败。添加nullable=False
一些ForeignKey()
说明对我有帮助。
我测试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)散布。
新版本的sqlite可以强制执行外键约束,但是为了向后兼容,您必须为每个数据库连接单独打开它!
sqlite> PRAGMA foreign_keys = ON;
我正在使用sqLAlchemy-如何确保始终打开此功能?我试过的是:
ENGIne = sqlalchemy.create_ENGIne('sqlite:///:memory:',echo=TruE)
ENGIne.execute('pragma foreign_keys=on')
&Hellip;但是它不起作用!&Hellip;我想念什么?
编辑: 我认为我的真正问题是我安装了多个版本的sqlite,而Python没有使用最新的版本!
>>> import sqlite3
>>> print sqlite3.@R_416_5607@version
3.3.4
但是我刚刚下载了3.6.23并将exe放在我的项目目录中!如何确定正在使用哪个.exe并进行更改?
以上是大佬教程为你收集整理的SQLite / SQLAlchemy:如何强制执行外键?全部内容,希望文章能够帮你解决SQLite / SQLAlchemy:如何强制执行外键?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。