我正在开发一个Django应用程序(Django v3.2.10pytest v7.0.1pytest-django v4.5.2),它使用cursor对我的第二个DB:my_db2执行原始查询,但在运行测试时,所有查询都返回空结果,就像它们在并行事务上运行一样.

我的测试文件:

@pytest.mark.django_db(transaction=True, databases=['default', 'my_db2'])
class TestItems:
    def test_people(self):
      person1 = PeopleFactory()  # Adds 1 person to my_db2
      assert fetch_all_persons() == 1 # Fails Returns 0

我的工厂:

class PeopleFactory(factory.django.DjangoModelFactory):
    id = factory.Sequence(lambda x: x + 1)
    name = factory.Faker('first_name')

    class Meta:
        model = People

我的职能:

from django.db import connections


def fetch_all_persons():
      with connections['my_db2'].cursor() as cursor:
        cursor.execute(f"SELECT * FROM Persons")
        return len(list(cursor.fetchall())):

According documentation transaction=True应该可以防止这个问题,但事实并非如此,有人知道如何解决它吗?

注.-使用ORM不是一个选项,这只是一个简单的例子来说明这个问题.实际使用的查询要复杂得多.

推荐答案

@hoefling和@ArkadiuszŁukasiewicz是对的,我只需要在工厂中添加相应的数据库:

class PeopleFactory(factory.django.DjangoModelFactory):
    id = factory.Sequence(lambda x: x + 1)
    name = factory.Faker('first_name')

    class Meta:
        model = People
        database = 'my_db2'

谢谢你们两位.

Python相关问答推荐

更改Seaborn条形图中的x轴日期时间限制

如何在Python中使用io.BytesIO写入现有缓冲区?

使用LineConnection动画1D数据

由于NEP 50,向uint 8添加-256的代码是否会在numpy 2中失败?

韦尔福德方差与Numpy方差不同

如何在箱形图中添加绘制线的传奇?

使用@ guardlasses. guardlass和注释的Python继承

如何调整QscrollArea以正确显示内部正在变化的Qgridlayout?

Django REST Framework:无法正确地将值注释到多对多模型,不断得到错误字段名称字段对模型无效'<><>

所有列的滚动标准差,忽略NaN

如何在图中标记平均点?

多处理队列在与Forking http.server一起使用时随机跳过项目

实现神经网络代码时的TypeError

Django admin Csrf令牌未设置

python panda ExcelWriter切换动态公式到数组公式

Gekko中基于时间的间隔约束

使用__json__的 pyramid 在客户端返回意外格式

numpy数组和数组标量之间的不同行为

Polars时间戳同步延迟计算

BeatuifulSoup从欧洲志愿者服务中获取数据和解析:一个从EU-Site收集机会的小铲子