使用 pytest-django 进行测试期间,Django 连接对象看不到第二个数据库的表

2024-03-27

底线:在使用 pytest-django 进行测试期间,我的 Django 连接对象看不到第二个数据库的表关系。

概述:我有一个问题,我的 Django 连接对象似乎获取了错误的数据库信息。当我查询“客户”数据库中的表时,我偶然发现了这个问题,Django 告诉我该关系不存在。 settings.py 数据库部分的设置如下:

DATABASES = {
    'default': {
        'NAME': 'user_data',
        'ENGINE': 'django.db.backends.postgres',
        'USER': 'postgres_1',
        'PASSWORD': 'superS3cret'
    },
    'customers': {
        'NAME': 'customer_data',
        'ENGINE': 'django.db.backends.postgres',
        'USER': 'postgres_1',
        'PASSWORD': 'superS3cret'
    }
}

当我在目录上运行“pytest”时,下面的两个游标都会从“默认”数据库获取信息:

sql = """SELECT table_name FROM information_schema.tables WHERE table_nameschema='public'"""

default = connections["default"].cursor()
default.execute(sql)
raw_data = default.fetchall()
sql_columns = [col[0] for col in default.description]
df1 = pd.DataFrame(raw_data, columns=sql_columns)

customers = connections["customers"].cursor()
customers.execute(sql)
raw_data = customers.fetchall()
sql_columns = [col[0] for col in customers.description]
df2 = pd.DataFrame(raw_data, columns=sql_columns)

df1 和 df2 的结果完全相同:只有“default”数据库中的表名称。

使用 pytest-django 并使用第二个 Postgres 数据库会发生这种情况,但只是有时.

在上面的查询中,我希望 df1 和 df2 不同,因为“默认”和“客户”数据库不同。但是,有时,连接游标无法正确“查看”第二个数据库中的所有信息。

奇怪的是,当我打印时,连接设置显示不同:

print(connections.databases)

“connections”对象包含两个不同的数据库,但其中一个是“测试”数据库。 print 语句生成一个字典,但请注意“测试客户":

(pdb) { 'default': { <conn info>}, 'test_customers': { <conn info> } }

Django 似乎正在尝试建立一个测试数据库,但失败了,并且没有通过测试,因为“test_customers”中的表与生产中的表不同。

如何解决此问题,以便 pytest-django 在测试期间始终看到第二个数据库(客户)中的表?我在数据库的设置和拆卸方面做错了什么吗?

UPDATE: 正在阅读关于数据库创建/重用的 pytest-django 文档 http://pytest-django.readthedocs.io/en/latest/database.html为我指明了正确的方向。然而,我对文档的这一部分有点不安:

目前 pytest-django 并不专门支持 Django 的 多数据库支持。但是,您可以使用普通的 Django TestCase 实例使用其 multi_db 支持。

如果您对支持多个数据库的最佳 API 有任何想法 直接在 pytest-django 请联系我们,我们感兴趣 最终支持这一点,但不确定是否简单地遵循 Django 方法。


pytest-django 不支持多数据库 https://pytest-django.readthedocs.io/en/latest/database.html#tests-requiring-multiple-databases。当我尝试多个数据库和参数时--reuse-db https://pytest-django.readthedocs.io/en/latest/database.html#reuse-db-reuse-the-testing-database-between-test-runs/--create-db https://pytest-django.readthedocs.io/en/latest/database.html#create-db-force-re-creation-of-the-test-database结果是,有时它有效(所有数据库都已创建并且可以正确使用),有时它不起作用(数据库未创建或 Django 抱怨数据库已存在)。

恕我直言,有两种选择:1)不要将 pytest 与 Django 一起使用;2)简化您的测试,因此您不需要多个数据库。对于选项 2) 我正在使用此设置:

normal settings:

DATABASES = {
    'default': ...,
    'secondary': ...,
}

pytest.ini:

[pytest]
...
DJANGO_SETTINGS_MODULE=my_app.settings.test
...

test.py:

# Import all from normal settings
from .base import *

DATABASES.pop('secondary')
# This will route all queries and migrations to the default DB
DATABASE_ROUTERS = []
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pytest-django 进行测试期间,Django 连接对象看不到第二个数据库的表 的相关文章

  • 当日志在不同进程中发出时,caplog 中的消息为空

    我正在使用 log cli true 运行测试 剧本 import logging import sys from multiprocessing import Process logging basicConfig stream sys
  • 分布式设置中的 Django SECRET_KEY

    如果我在负载均衡器后面设置多个 django 服务器 我希望 SECRET KEY 相同 不同还是有关系 该文档对于这个值的具体用途有点薄弱 我想一定是一样的 这是相关问题 Django SECRET KEY https stackover
  • 如何从序列化器字段订购 Django Rest Framework 查询集?

    我如何订购 DjangoQuerySet来自序列化器字段 由于字段太复杂 我无法订购QuerySet using annotate我也无法将值存储在模型中 Edit 串行器 class DrinkListModelSerializer se
  • 有皮茨时区列表吗?

    我想知道 Python 库 pytz 中时区参数的所有可能值是什么 怎么做 您可以列出所有可用的时区pytz all timezones In 40 import pytz In 41 pytz all timezones Out 42 A
  • 如何从 docker-compose 链接到 Amazon RDS

    我的 docker compose yml 看起来像这样 django build user django links LINK TO AMAZON RDS command gunicorn sh env file config setti
  • 如何将自定义迁移添加到外部 Django 应用程序

    我已经在我的自定义 Django 1 10 应用程序中对一些第三方应用程序进行了一些猴子修补 现在 当我尝试创建初始迁移时 它还会为这些外部应用程序生成迁移 但它将这些迁移放在我的 virtualenv 的站点中 packages 目录 无
  • django 管理站点导航侧边栏搞砸了

    我最近在我的项目中添加了一个包并做了一个pip freeze gt requirements txt然后 然后我做了pip install r requirements txt到我的本地 它添加了一个侧边栏 I did a pip inst
  • Django 的登录代码

    谁能给我一些带有模板代码的示例代码来创建 Django 登录 Thanks 包含示例登录模板在文档中 https docs djangoproject com en stable topics auth default module dja
  • @monthly cron 作业不可靠

    我们的客户希望我们每月创建一份报告 过去 我们使用 monthly cron 作业来完成此任务 但这并不可靠 服务器可能会在这一分钟内宕机 Cron 不会重新运行这些作业 如果服务器已启动 此时数据库可能无法访问 如果服务器已启动且数据库已
  • 引发 404 并继续 URL 链

    我有一个像这样的 URL 模式 urlpatterns url r list titles name list url r P
  • 在 django Rest 框架中实现角色

    我正在构建一个 API 应该拥有以下类型的用户 super user 创建 管理管理员 admin 管理事件 模型 和事件参与者 participants 参加活动 受管理员邀请参加活动 另外我想让每种类型的用户都有电话号码字段 I tri
  • 静态文件配置不正确

    我已经在 Heroku 上部署了简单的博客应用程序 它运行在Django 1 8 4 我在静态文件方面遇到了一些问题 当打开我的应用程序时 我看到Application Error页面 所以我尝试调试它并发现当我提交到 Heroku 时它无
  • 如何在 Django 管理中以表格格式显示添加模型?

    我刚刚开始使用 Django 编写我的第一个应用程序 为我的家庭设计的家务图表管理器 在本教程中 它向您展示了如何添加相关对象 http docs djangoproject com en dev intro tutorial02 cust
  • Django 如何从 ManyToManyField 序列化并列出全部

    我正在使用 Django 1 9 1 开发移动应用程序后端 我实现了关注者模型 现在我想列出用户的所有关注者 但目前我不得不这样做 我还使用 Django Rest 框架 这是我的 UserProfile 模型 class UserProf
  • 如何将 pytest 装置与 django TestCase 一起使用

    我如何在TestCase方法 类似问题的几个答案似乎暗示我的例子应该有效 import pytest from django test import TestCase from myapp models import Category py
  • Django CreateView:在验证之前设置用户

    我有一个模型 根据对象是由用户还是系统创建 对其名称字段使用不同的验证 class Symbol models Model name models CharField name unique True max length 64 creat
  • 将 django Charfield "\t" 转换为制表符

    我有一个带有 Charfield 的 django 模型 其中包含 unicode 转义字符串 t 将其转换为真正的选项卡的最简单方法是什么 如str t 找到了答案 t decode string escape 如上所述here http
  • 防止 Django 在并发请求时多次将同一对象保存到数据库

    对于我们的博客平台 我们有一个 文章 模型 其中包含一个 更新的 日期时间字段 class Article models Model updated models DateTimeField null True blank True 当任何
  • 如何在“python setup.py test”中运行 py.test 和 linter

    我有一个项目setup py文件 我用pytest作为测试框架 我还在我的代码上运行各种 linter pep8 pylint pydocstyle pyflakes ETC 我用tox在多个 Python 版本中运行它们 并使用以下命令构
  • 将 Django 表单中的所有 CharField 表单字段输入转换为小写

    我使用 Django 表单进行用户注册 用户可以在其中输入优惠券代码 我希望在优惠券代码字段中输入的所有字符都转换为小写 我尝试过在保存方法 自定义清理方法和自定义验证器中使用 lower 但这些方法没有运气 下面是我的代码 class S

随机推荐

  • 我可以通过 S3 中的特定文件上传触发 ECS/Fargate 任务吗?

    我知道我可以在上传文件时触发任务 每个https docs aws amazon com AmazonCloudWatch latest events CloudWatch Events tutorial ECS html https do
  • CSS提交按钮和输入文本的宽度不一样

    尽管我准确地制作了提交按钮和输入文本 width 60 但是当我运行应用程序时 它们的宽度不同 loginClass width 40 height 40 margin auto auto loginClass ul li list sty
  • ms access - vba:编译错误:预期:=

    我有一个子程序如下 Public Sub updateStagesTable sName As String percentageValue As Double stageName sName sSQL INSERT INTO Stages
  • 手臂 g++ 中缺少一些东西

    我安装了 CodeSourcery g 工具链并尝试编译一个简单的 hello world 程序 include
  • 我的 PDO 构造错误 - Php

    这是6号线的抱怨声 Warning PDO construct expects parameter 2 to be string array given 伴随着第 7 行错误 Fatal error Call to a member fun
  • 二维数组的按行 numpy.isin [重复]

    这个问题在这里已经有答案了 我有两个数组 A np array 3 1 4 1 1 4 B np array 0 1 5 2 4 5 2 3 5 是否可以使用numpy isin二维数组按行排列 我想检查一下是否A i j is in B
  • 使用用户定义的运行时属性的 UILabel 的cornerRadius 不起作用

    我尝试使用将cornerRadius添加到UILabelUser Defined Runtime Attributes但它没有按预期工作 cornerRadius 没有设置 我想知道我在哪里犯了错误 我附上了它的截图 帮我解决一下 It i
  • JavaScript 中的构造函数和继承

    这是关于 JavaScript 中的 继承 假设我创建一个构造函数 Bird 和另一个名为 Parrot 的构造函数 通过将 Bird 的实例分配给 Parrot 的原型来 继承 Bird 的属性 如以下代码所示 function Bird
  • 使用前缀路由时 url 中的 CakePHP3.x 控制器名称

    我正在尝试在 CakePHP3 中使用前缀路由 我将以下几行添加到 config routes php Router prefix admin function routes All routes here will be prefixed
  • Prefuse:向 GraphView 演示添加边权重

    我正在使用 prefuse 可视化工具包 工具包中的 GraphView 演示非常出色 提供了各种控件来可视化数据 我能够为我的数据集生成 GraphML 并使用 GraphView 对其进行可视化 我希望拥有的另一件事是使用权重或颜色编码
  • Elasticsearch:使用 Java 添加手动映射

    我无法更改映射 有人能帮我找到代码中的错误吗 我根据几个教程找到了更改映射的标准方法 但是 当我尝试调用映射结构时 在手动创建映射后只会出现一个空白映射结构 但是插入一些数据后就会出现映射规范 因为ES当然使用默认的映射规范 更具体的请看下
  • Php $_POST方法获取textarea值

    我正在使用 php 使用 post 方法获取 textarea 值 但得到一个奇怪的结果 让我向你展示我的代码
  • 在没有 VSDBCMD 的情况下部署 VS2010 数据库项目?

    自首次引入 Visual Studio 2010 的数据库项目以来 我们一直在多个内部或单一客户项目中使用它们 到目前为止 它们对我们来说运行良好 现在 我们第一次将它们与 盒装 产品一起使用 该产品需要打包才能安装在任意客户站点 到目前为
  • 可靠的WebSocket连接状态检测

    我一直在寻找实现可靠的 WebSocket 连接恢复机制 经过一番调查 我发现一种方法是将心跳发送到服务器 ping pong 并检查我是否收到整个pong在有限的时间内 因此 如果连接实际上已断开或速度非常慢 则会被视为断开连接 if a
  • 如何修复IntelliJ IDEA方法参数自动完成?

    我正在使用 IntelliJ IDEA 15 我注意到 默认情况下 Eclipse 在编写需要多个参数的方法调用时提供了更方便的自动完成功能 Eclipse 会自动填充默认参数 并允许您通过按快速浏览它们Tab IntelliJ 不这样做
  • 打印转换后的 XML

    由于情况超出了我的控制范围 我将用自制的 XML 报告替换所有的 Crystal 报告 这些报告运行得非常好 对于大多数弹出 Crystal Reports 查看器的报表 以下代码可以在 IE 中很好地打开它们 并通过 XSLT 样式表将其
  • DRF Serializer - 如何返回外键字段?

    早上好 我真的很难解决从 Django Rest Framework API 返回值的问题 我有两个模型 SirTarget 和 Status SirTarget 就像一张票证 而 Status 是票证的文本状态标签 对应于处理票证的阶段
  • 来自 Properties 的 C# 自定义属性

    所以我有一个来自我的类 的属性集合 我想循环遍历它 对于每个属性 我可能有自定义属性 因此我想循环遍历这些属性 在这种特殊情况下 我的城市类别有一个自定义属性 public class City ColumnName OtroID publ
  • Swift / SKStoreProductViewController PushViewController 结果为(lldb)

    为了将用户推送到 iTunes 商店获取所需的项目 我使用以下函数 func openStoreProductWithiTunesItemIdentifier identifier String let storeViewControlle
  • 使用 pytest-django 进行测试期间,Django 连接对象看不到第二个数据库的表

    底线 在使用 pytest django 进行测试期间 我的 Django 连接对象看不到第二个数据库的表关系 概述 我有一个问题 我的 Django 连接对象似乎获取了错误的数据库信息 当我查询 客户 数据库中的表时 我偶然发现了这个问题