OperationalError: нет такой таблицы, но база данных и папка migrations были удалены

Очень похоже на этот вопрос:

У меня есть скрипт, который:

  • dumps all data to json,
  • deletes the database.sqlite3 file and the migrations folder
  • executes:
    1. python makemigrations app
    2. python manage.py migrate app
    3. python manage.py makemigrations
    4. python manage.py migrate
  • loads all data from json

I use it a lot when developing stuff and restarting very often. Now even the makemigrations app command fails with the OperationalError: no such table.

Самое забавное, что когда я комментирую все появления этой таблицы (но модель все еще находится в models.py), все работает нормально. Если я затем удаляю комментарии, все работает. Что я упустил?

Отслеживание:

Эта часть в вашем трассировочном отклике:

File "..\projectname\appname\views.py", line 15, in <module>
    from .external.server_api import APISERVICE
File "..\projectname\appname\external\hiveserver_api.py", line 10, in <module>
    USB_ETHERNET_ADAPTER_MAC_LIST = [A.mac for A in unmigrateablemodel.objects.all()]

говорит нам, что вы выполняете запрос во время импорта модуля hiveserver_api.py.

Поскольку в пустой базе данных нет таблиц, импорт этого модуля всегда будет неудачным, и он импортируется через views, который импортируется через urls, который импортируется, поскольку приложение находится в INSTALLED_APPS.

Вам нужно будет рефакторить код, чтобы он не делал этот запрос во время импорта, или только временно:

USB_ETHERNET_ADAPTER_MAC_LIST = []

Это также подразумевает наличие ошибки в вашем приложении; этот список MAC-адресов никогда не будет обновлен в ваших представлениях, пока/если приложение не будет перезагружено.


В качестве отступления,

USB_ETHERNET_ADAPTER_MAC_LIST = list(
    unmigrateablemodel.objects.all().values_list("mac", flat=True)
)

является эффективным способом сделать то же самое.

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