程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了SQLite / SQLAlchemy:如何强制执行外键?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决sqlite / SQLAlchemy:如何强制执行外键??

开发过程中遇到sqlite / SQLAlchemy:如何强制执行外键?的问题如何解决?下面主要结合日常开发的经验,给出你关于sqlite / SQLAlchemy:如何强制执行外键?的解决方法建议,希望对你解决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_IDtype_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,请注明来意。