如何在 Django Pytests 中使用游标查询其他数据库

How to query additional databases using cursor in Django Pytests

我正在开发 Django 应用程序(Django v3.2.10pytest v7.0.1pytest-django v4.5.2),它使用游标对我的辅助数据库执行原始查询:my_db2,但是当 运行 测试时,所有查询 return 空结果,就像它们 运行 并行交易一样。

我的测试文件:

@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'

谢谢你们。