django.db.utils.OperationalError: no such table: auth_user
После того, как я установил Django-userena, в моей версии django возникает ошибка:1.9.5 Я просто устанавливаю django-userena шаг за шагом, но когда я ее переношу, возникает ошибка, и я не понимаю, как ее решить.
Traceback (most recent call last):
File "manage.py", line 12, in <module>
execute_from_command_line(sys.argv)
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 353, in execute_from_command_line
utility.execute()
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Python27\lib\site-packages\django\core\management\base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "C:\Python27\lib\site-packages\django\core\management\base.py", line 399, in execute
output = self.handle(*args, **options)
File "C:\Python27\lib\site-packages\django\core\management\commands\migrate.py", line 204, in handle
emit_post_migrate_signal(self.verbosity, self.interactive, connection.alias)
File "C:\Python27\lib\site-packages\django\core\management\sql.py", line 50, in emit_post_migrate_signal
using=db)
File "C:\Python27\lib\site-packages\django\dispatch\dispatcher.py", line 192, in send
response = receiver(signal=self, sender=sender, **named)
File "C:\Python27\lib\site-packages\guardian\management\__init__.py", line 33, in create_anonymous_user
User.objects.get(**lookup)
File "C:\Python27\lib\site-packages\django\db\models\manager.py", line 122, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Python27\lib\site-packages\django\db\models\query.py", line 381, in get
num = len(clone)
File "C:\Python27\lib\site-packages\django\db\models\query.py", line 240, in __len__
self._fetch_all()
File "C:\Python27\lib\site-packages\django\db\models\query.py", line 1074, in _fetch_all
self._result_cache = list(self.iterator())
File "C:\Python27\lib\site-packages\django\db\models\query.py", line 52, in __iter__
results = compiler.execute_sql()
File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py", line 848, in execute_sql
cursor.execute(sql, params)
File "C:\Python27\lib\site-packages\django\db\backends\utils.py", line 79, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "C:\Python27\lib\site-packages\django\db\backends\utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "C:\Python27\lib\site-packages\django\db\utils.py", line 95, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "C:\Python27\lib\site-packages\django\db\backends\utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "C:\Python27\lib\site-packages\django\db\backends\sqlite3\base.py", line 323, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: auth_user
Программы:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'userena',
'guardian',
'easy_thumbnails',
'accounts',
]
7 ответов
./manage.py migrate
если ваша версия Django 1.9 или ниже, используйте
./manage.py syncdb
затем
python manage.py createsuperuser
более подробная информация на https://github.com/django/django/blob/master/django/contrib/auth/forms.py
Пусть это поможет
python manage.py migrate --run-syncdb
Это увидит, какие таблицы не были созданы, и создаст все необходимые таблицы. Надеюсь, это поможет тебе!
Я получил ту же ошибку и, чтобы исправить то же самое, я проверил, присутствует ли упомянутая таблица с ошибкой в подключенной БД или нет. Не было. Снова применили миграцию и все заработало.
python manage.py migrate
python manage.py makemigrations
Проблема в этой строке:
File "C:\Python27\lib\site-packages\guardian\management\__init__.py", line 33, in create_anonymous_user
User.objects.get(**lookup)
guardian\management\__init__.py
звонит User
прежде чем это будет определено.
Почему это называется до того, как оно будет определено?... ну, это называется makemigrations
чтобы выяснить, есть ли изменения в db
определить их (найденные изменения)
... так что это проблема "курица и яйцо".
У меня та же ошибка с похожей проблемой, но код, который нарушал, был моим собственным кодом (не библиотека, как guardian
)
Мой код был такой:
CHAT_BOT_USER, created = User.objects.get_or_create(username='rosty', \ email=settings.EMAIL_HOST_USER)
Оскорбительная часть User
используется до auth_user
таблица создана
Я решил только выполнение кода, когда таблица присутствует. Это происходит, когда нет OperationError
, И вы можете узнать это с try/except
как это:
from django.db import OperationalError
try:
CHAT_BOT_USER, created = User.objects.get_or_create(username='rosty', email=settings.EMAIL_HOST_USER)
except OperationalError:
CHAT_BOT_USER = None
if created:
CHAT_BOT_USER.set_password(settings.EMAIL_HOST_PASSWORD)
CHAT_BOT_USER.save()
Сюда makemigrations
управляет except
код и runserver
управляет try
код.
Обратите внимание created
логическое, вы можете использовать любой другой способ избежать makemigration
запустить код, который зависит от User.objects....
Результаты
Я столкнулся с такой же ошибкой при работе с чатами. Я решил использовать удаление файла db.sqlite3 и удаление файла 0001_initial.py в папке миграции приложения, а затем я выполнил следующие инструкции: -
python manage.py makemigrations
python manage.py migrate
тогда я смог создать суперпользователя, используя
python manage.py createsuperuser
Это ошибка устранена!
Это происходит всякий раз, когда таблицы не созданы или недоступны в базе данных, на которую указывает это приложение.
settings.py
.
Поэтому создайте файлы миграции с помощью этой команды:
python manage.py makemigrations
После создания файлов миграции их необходимо перенести:
python manage.py migrate
Если это не работает, используйте:
python manage.py makemigrations yourappname
python manage.py migrate yourappname