如何使用sqllite在pytest中启用外键检查

How can I enable foreign-key checks in pytest using sqllite(如何使用sqllite在pytest中启用外键检查)
本文介绍了如何使用sqllite在pytest中启用外键检查的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Django项目,其测试在我调用py.test时运行,但我最近注意到它没有检查外键约束。如何让它检查外键约束? 显然,foreign key constraints weren't even possible until sqlite 3,但是我真的不知道我正在运行什么版本,因为我没有sqlite的CLI,但是它只是被Django自动包括在内?(我使用的是Django 1.9.10),但是sqlite3是在2009年发布的,所以这不是问题所在,对吧?

也许it must still be enabled by the application at runtime, using the PRAGMA foreign_keys command.,但我不知道如何使我的测试做到这一点?

[更新] 因此,看起来sqlite开箱即用并未检查它们。

class Referenced(models.Model):
    pass

class Referencer(models.Model):
    fk = models.ForeignKey(Referenced)

>>> Referencer.objects.create(fk_id=-1)
<Referencer>
>>> Referencer.objects.all()[0].fk
DoesNotExist

推荐答案

我最终创建了一个包来解决此问题。

pip install sqlite_checkforeignkeys

然后配置数据库:

DATABASES = {
    'default': {
        'ENGINE': 'sqlite_checkforeignkeys_engine',
        'TEST': {'NAME': ':memory:'},
    }
}

它涉及重写现有的SQLite引擎以强制执行外键

有关详细信息,请访问https://github.com/hulu/sqlite_checkforeignkeys

这篇关于如何使用sqllite在pytest中启用外键检查的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
FastAPI + Tortoise ORM + FastAPI Users (Python) - Relationship - Many To Many(FastAPI+Tortoise ORM+FastAPI用户(Python)-关系-多对多)
Inserting NaN value into MySQL Database(将NaN值插入MySQL数据库)
Window functions not working in pd.read_sql; Its shows error(窗口函数在pd.read_sql中不起作用;它显示错误)
(Closed) Leaflet.js: How I can Do Editing Geometry On Specific Object I Select Only?((已关闭)Leaflet.js:如何仅在我选择的特定对象上编辑几何图形?)
in sqlite update trigger with multiple if/Case Conditions(在具有多个IF/CASE条件的SQLite UPDATE触发器中)