Как запрашивать дополнительные базы данных с помощью курсора в Django Pytests
Я разрабатываю приложение Django (Django v3.2.10, pytest v7.0.1, pytest-django v4.5. 2), который использует курсор для выполнения необработанных запросов к моей вторичной БД: 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
Моя функция:
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())):
Согласно документации 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'
Спасибо вам обоим.