Как использовать существующую базу данных в django pytest?
У меня есть схема по умолчанию для моего API, и существующая схема для поиска данных. Вот настройки базы данных:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"OPTIONS": {"options": "-c search_path=public"},
"NAME": config("DB_NAME", default=""),
"USER": config("DB_USER_NAME", default=""),
"PASSWORD": config("DB_PASSWORD", default=""),
"HOST": config("DB_HOST", default="db"),
"PORT": config("DB_PORT", default=""),
},
"data": {
"ENGINE": "django.db.backends.postgresql",
"OPTIONS": {"options": "-c search_path=data"},
"NAME": config("DB_NAME", default=""),
"USER": config("DB_USER_NAME", default=""),
"PASSWORD": config("DB_PASSWORD", default=""),
"HOST": config("DB_HOST", default="db"),
"PORT": config("DB_PORT", default=""),
},
}
Для "данных" я использовал команду python manage.py inspectdb --database=data > apps/data/models.py
И получил models.py следующего вида:
class Product(models.Model):
id = models.AutoField(primary_key=True)
...
class Meta:
managed = False
db_table = "Product"
Я попробовал создать несколько pytest:
@pytest.mark.django_db(databases=["default", "data"], transaction=True)
class TestSomeTestAPIView:
view_name = "some-view-name"
def test_some_test_name(self, auth_client):
print(Product.objects.using("data").all())
И получил ошибку
"Product" table does not exists
Так что мне нужно использовать существующую схему db "data" без создания миграций, и использовать схему по умолчанию, как обычно.
Я пробовал https://pytest-django.readthedocs.io/en/latest/database.html, но в моем случае это не работает. Есть идеи, как запустить pytests?
Использовать вашу "производственную" базу данных в тестах напрямую - плохая идея.
Поэтому Django создаст для вас отдельные тестовые базы данных. Чтобы заполнить тестовую базу данных, слейте данные prod в фикстуру, а затем загрузите эту фикстуру в тест:
Если вы настаиваете на использовании существующей базы данных напрямую, есть раздел о том, как это сделать с помощью pytest: https://pytest-django.readthedocs.io/en/latest/database.html#using-an-existing-external-database-for-tests