OperationalError: нет такой таблицы, но база данных и папка migrations были удалены
Очень похоже на этот вопрос:
У меня есть скрипт, который:
- dumps all data to json,
- deletes the
database.sqlite3
file and themigrations
folder - executes:
- python makemigrations app
- python manage.py migrate app
- python manage.py makemigrations
- 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)
)
является эффективным способом сделать то же самое.