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

2024-01-12

我有一个 django 项目,其中的测试在我调用时运行py.test,但我最近注意到它不检查外键约束。我怎样才能让它检查外键约束?

显然,外键约束直到 sqlite 3 才成为可能 https://sqlite.org/foreignkeys.html,但我真的不知道我正在运行什么版本,因为我没有 sqlite 的 cli,但它只是被 django 自动包含? (我使用的是 django 1.9.10),但是 sqlite 3 于 2009 年发布,所以这不是问题,对吧?

Perhaps 应用程序仍必须在运行时使用 PRAGMAforeign_keys 命令启用它。 https://sqlite.org/foreignkeys.html,但我不知道如何让我的测试做到这一点?

[更新] 所以,看起来开箱即用的 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 https://github.com/hulu/sqlite_checkforeignkeys

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 sqlite 在 pytest 中启用外键检查 的相关文章

随机推荐

  • 如何在 Kotlin 中打印 ClosedRange

    我正在学习 Kotlin 并且我正在尝试理解Ranges 我创建了一系列String如下 val alpha A Z 我想打印我写的这个 for item in alpha println item 但它给出了错误 错误 13 18 Kot
  • 什么时候工厂方法比简单工厂更好,反之亦然?

    我正在阅读 Head First Design Patterns 一书 我相信我了解简单工厂和工厂方法 但我很难看出工厂方法相对于简单工厂带来的优势 如果对象 A 使用简单工厂来创建其 B 对象 那么客户端可以这样创建它 A a new A
  • 到 Out-GridView 和 Out-File 的管道有不同的行?

    以下命令仅返回一行 参数 Context 10被忽略 select string path file txt pattern Context 10 Out GridView 但是 以下命令创建一个包含所有行的文件 select string
  • logback 在 Flink 中不起作用

    我有一个单节点 Flink 实例 它在 lib 文件夹中具有 logback 所需的 jar logback classic jar logback core jar log4j over slf4j jar 我已从 lib 文件夹中删除了
  • 如何在 iOS 中用渐变填充由 CGPoints 定义的形状?

    我在代码中设置了自定义形状的箭头 我想做的就是用渐变填充它 问题是 我不知道如何用渐变填充非矩形形状 暗框内的空间 有任何想法吗 Define colours used in drawing CGContextRef context UIG
  • UILabel 默认字偶距与 CATextLayer 不同

    我有一个UILabel与字符串 LA 我也有一个CATextLayer具有相同的字符NSAttributedString分配给其string财产 字距调整UILabel与CATextLayer 这是代码 void viewDidLoad s
  • ExecutorService 与 Swing 计时器

    我一直在读肮脏的有钱客户 http filthyrichclients org 最近注意到 虽然Java的版本是6 但是并没有提到Concurrent Framework 因此 他们谈论 java util Timer 和 javax sw
  • 如何绑定到用户控件的属性?

    在 Windows 应用商店应用中 您创建一个用户控件来封装和重用代码隐藏和布局 XAML 一个简单的用户控件可能如下所示
  • Android 中的文件浏览器[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PHP 中的 INET_ATON() 和 INET_NTOA()?

    我想将 IP 地址存储在数据库中 但我还需要在整个应用程序中使用它们 我读到关于使用INET ATON and INET NTOA 在我的 MySQL 查询中 从 IP 地址中获取 32 位无符号整数 这正是我想要的 因为它将比使用 cha
  • 每月累计总数和 Postgresql

    我正在尝试计算 dellstore2 数据库的累计用户数 看看这里的答案和其他论坛 我用了这个 select date trunc month orderdate sum count distinct customerid over ord
  • 无法插入断点。低值地址

    我正在尝试调试这个简单的 C 程序 include
  • Facebook Javascript,如何检测用户是否是我的 Facebook 页面的粉丝?在我的网站上?

    我有以下 JS 代码 该代码的目的是首先获取用户的 facebook id 然后使用 FQL 对照我的页面 ID 检查该 id 并确保该用户是粉丝 我遇到的问题是 代码真正起作用的唯一时间是我使用自己的个人 Facebook 个人资料登录时
  • 具有给定厚度、位置和半径的拉环。 (Java2D)

    我需要画一个具有给定厚度的环 看起来像这样 中心必须是透明的 这样它就不会覆盖之前绘制的形状 或其他戒指 我尝试过这样的事情 g is a Graphics2D object g setColor Color RED g drawOval
  • 验证来自 Spring RESTful 资源服务器的 OAuth 2.0 访问令牌

    我想保护我的 Spring RESTful 后端 一种方法 正确的 是使用 OAuth 2 0 如下所示 http www youtube com watch v 8uBcpsIEz2I http www youtube com watch
  • Android 中按钮的单击和双击

    在我的应用程序中 我有一个按钮 单击和双击按钮后将执行单独的操作 我怎样才能做到这一点 谢谢 嗯 很简单 只需覆盖即可 OnClickListener 的 onClick 方法 public abstract class DoubleCli
  • 使用 Android Jetpack 导航时如何禁用导航图标

    当您向导航架构注册工具栏时 它将创建一个箭头 允许您在您所在的片段上弹出 在一些基本级别的片段上 我不想有汉堡菜单图标或箭头 而是自定义视图对象 如何从视图中禁用后退按钮 我尝试过手动禁用 但很难找到如何使用导航拱门来管理它 val sup
  • 如何访问控制台应用程序中的资源?

    我如何获得访问权限 Properties Resources在控制台应用程序中 这是为了使用解决方案附加的资源文件 Here s exactly what I can see 第一个语法错误不是我关心的 只能使用赋值 调用 自增 自减和新对
  • JavaScriptSerializer 可以排除具有 null/默认值的属性吗?

    我正在使用 JavaScriptSerializer 来序列化一些实体对象 问题是 许多公共属性包含 null 或默认值 有没有办法让 JavaScriptSerializer 排除具有 null 或默认值的属性 我希望生成的 JSON 不
  • 如何使用 sqlite 在 pytest 中启用外键检查

    我有一个 django 项目 其中的测试在我调用时运行py test 但我最近注意到它不检查外键约束 我怎样才能让它检查外键约束 显然 外键约束直到 sqlite 3 才成为可能 https sqlite org foreignkeys h