У меня есть приложение, которое использует функции SQL для некоторых своих запросов.
На данный момент я написал функцию установки, которая устанавливает функции SQL через курсор:
def install_all():
install(FUNC1)
install(FUNC2)
install(FUNC3)
def install(script):
with connection.cursor() as cursor:
cursor.execute(script)
Я добавил вызов install_all()
внутри одного из __init__.py
проекта, чтобы при каждом запуске проекта переустанавливать функции (в случае их изменения).
Я действительно это делаю not хочу сделать это с помощью ручных миграций.
Проблема, с которой я столкнулся в последнее время, заключается в том, что это создает открытое соединение с БД и препятствует работе таких вещей, как manage reset_db
, из-за открытого соединения.,Даже manage dbshell
открывается с существующим подключением к БД от курсора.Предположительно курсор выполняется, сокет не закрыт, и exec
'ed psql
наследует все еще открытый сокет.
Сейчас я изменил его на:
from django.db import connection
def install_all():
install(FUNC1)
install(FUNC2)
install(FUNC3)
connection.close()
... и это работает, но кажется неуклюжим.
Существует ли явно поддерживаемый способ включения этого кода запуска в приложение Django?
версия: Django 1.11