Как использовать существующую базу данных в 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

Вернуться на верх