Джанго отказывается использовать вид БД - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть следующий сценарий:

  • Я определил правильное представление в базе данных, следя за тем, чтобы представление было названо в соответствии с соглашениями django
  • Я убедилсячто моя модель не управляется django.Соответственно созданная миграция определяется как managed=False
  • Представление БД само по себе работает нормально.

При запуске конечной точки API происходят две странные вещи:

  1. запрос к базе данных завершается неудачно с:

    ОШИБКА: отношение «потребление_реценции» не существует в символе 673

(у меня включено ведение журналана уровне postgres и копирование-вставка точно такого же запроса в консольный клиент db работает, без каких-либо изменений )

запрос к БД повторяется много раз (более 30?).Почему это происходит?Есть ли настройка django для управления этим?(Я отправляю запрос в API только один раз, вручную с помощью curl)

РЕДАКТИРОВАТЬ

Это моя модель:

class RecentConsumption(models.Model):

    name = models.CharField(max_length=100)
    ...

    class Meta:
        managed = False

Этооператор SQL, сгенерированный django и отправленный в базу данных:

SELECT "consumption_recentconsumption"."id", "consumption_recentconsumption"."name", ... FROM "consumption_recentconsumption" LIMIT 21;

Как я уже упоминал, он не выполняется через django, но отлично работает при запуске непосредственно против базы данных.

EDIT2

Журналы из postgres при непосредственном запуске sql:

2018-12-13 11:12:02.954 UTC [66] LOG:  execute <unnamed>: SAVEPOINT JDBC_SAVEPOINT_4
2018-12-13 11:12:02.955 UTC [66] LOG:  execute <unnamed>: SELECT "consumption_recentconsumption"."id", "consumption_recentconsumption"."name", "consumption_recentconsumption"."date", "consumption_recentconsumption"."psc", "consumption_recentconsumption"."material", "consumption_recentconsumption"."system", "consumption_recentconsumption"."env", "consumption_recentconsumption"."objs", "consumption_recentconsumption"."size", "consumption_recentconsumption"."used", "consumption_recentconsumption"."location", "consumption_recentconsumption"."WWN", "consumption_recentconsumption"."hosts", "consumption_recentconsumption"."pool_name", "consumption_recentconsumption"."storage_name", "consumption_recentconsumption"."server" FROM "consumption_recentconsumption" LIMIT 21
2018-12-13 11:12:10.038 UTC [66] LOG:  execute <unnamed>: RELEASE SAVEPOINT JDBC_SAVEPOINT_4

Журналы из postgres при запуске через django (повторяется более 30 раз):

2018-12-13 11:13:50.782 UTC [75] LOG:  statement: SELECT "consumption_recentconsumption"."id", "consumption_recentconsumption"."name", "consumption_recentconsumption"."date", "consumption_recentconsumption"."psc", "consumption_recentconsumption"."material", "consumption_recentconsumption"."system", "consumption_recentconsumption"."env", "consumption_recentconsumption"."objs", "consumption_recentconsumption"."size", "consumption_recentconsumption"."used", "consumption_recentconsumption"."location", "consumption_recentconsumption"."WWN", "consumption_recentconsumption"."hosts", "consumption_recentconsumption"."pool_name", "consumption_recentconsumption"."storage_name", "consumption_recentconsumption"."server" FROM "consumption_recentconsumption" LIMIT 21
2018-12-13 11:13:50.783 UTC [75] ERROR:  relation "consumption_recentconsumption" does not exist at character 673
2018-12-13 11:13:50.783 UTC [75] STATEMENT:  SELECT "consumption_recentconsumption"."id", "consumption_recentconsumption"."name", "consumption_recentconsumption"."date", "consumption_recentconsumption"."psc", "consumption_recentconsumption"."material", "consumption_recentconsumption"."system", "consumption_recentconsumption"."env", "consumption_recentconsumption"."objs", "consumption_recentconsumption"."size", "consumption_recentconsumption"."used", "consumption_recentconsumption"."location", "consumption_recentconsumption"."WWN", "consumption_recentconsumption"."hosts", "consumption_recentconsumption"."pool_name", "consumption_recentconsumption"."storage_name", "consumption_recentconsumption"."server" FROM "consumption_recentconsumption" LIMIT 21

1 Ответ

0 голосов
/ 13 декабря 2018

Отвечая себе, на случай, если это кому-нибудь поможет в будущем.

Я запускаю команду CREATE VIEW в PyCharm, которая, похоже, использует транзакцию для всех операций.Это означает, что представление доступно в сеансе db в PyCharm (поскольку оно использует транзакцию для всех запросов), но не извне.Приложение django работает в консоли и не видит представление.

Решение состоит в том, чтобы просто зафиксировать транзакцию в PyCharm, чтобы сделать ее полностью видимой.

окончательное решение - создать представление с помощью миграций django.

...