Django: нет такой таблицы: django_session
Я нашел несколько тем с этим названием, но ни один из их решений не работал у меня. У меня есть два сайта Django, которые работают на моем сервере, оба через Apache, используя разные виртуальные хосты на двух портах, которыми управляет мой интерфейс Nginx (используется для статических файлов). Один сайт использует MySql и работает отлично. Другой использует Sqlite3 и получает ошибку в заголовке.
Я загрузил копию sqlite.exe и посмотрел файл mysite.sqlite3 (база данных SQLite в этом каталоге), и действительно есть таблица django_session с действительными данными в ней. У меня есть sqlite.exe в моей системе32, а также папка сайтов-пакетов в моем пути Python.
Вот раздел моего файла settings.py:
MANAGERS = ADMINS
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'mysite.sqlite3', # Or path to database file if using sqlite3.
'USER': '', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
Я использовал python manage.py syncdb без ошибок и просто комментарий "Нет привязок".
Есть ли у кого-нибудь идеи, что еще может происходить здесь? Я рассматриваю возможность передачи всего своего старого приятеля MySql и просто игнорирования Sqlite, так как на самом деле это всегда вызывало у меня какие-то проблемы. Я использовал его только для того, чтобы знать его в любом случае. У меня нет подавляющей причины, почему я должен ее использовать. Но опять же, только для моего назидания кто-нибудь знает, что это за проблема? Я не люблю сдаваться.
Ответы
Ответ 1
Возможно, сервер использует другую рабочую директорию, чем команда manage.py
. Поскольку вы предоставляете относительный путь к базе данных sqlite, она создается в рабочем каталоге. Попробуйте это с абсолютным путем, например:
'NAME': '/tmp/mysite.sqlite3',
Помните, что вам нужно снова запустить ./manage.py syncdb
или скопировать текущую базу данных с существующими таблицами на /tmp
.
Если он разрешит сообщение об ошибке, вы можете искать лучшее место, чем /tmp
: -)
Ответ 2
После внесения любых изменений в код запустите следующие команды
manage.py makemigrations
manage.py migrate
это сработало для меня.
Ответ 3
В случае, если это помогает кому-то еще: проблема для меня состояла в том, что у меня не было приложения django.contrib.sessions
без комментариев в моем INSTALLED_APPS
. Раскомментировав это и повторив syncdb
, сделал трюк.
Ответ 4
В моем случае проблема заключалась в том, что я забыл запустить manage.py syncdb
после внесения некоторых изменений. Когда я это сделал, проблема была решена.
Ответ 5
запустите это в командной оболочке:
python manage.py migrate
Это исправлено для меня.
Ответ 6
Когда я запускаю "manage.py runningerver". Если я запускаю, когда мой текущий путь не находится в директории проекта (например, python/somefolder/somefolder2/currentprj/manage.py runningerver), у меня будет такая проблема, как вы. разрешить cd, чтобы выполнить проект перед командой запуска.
Ответ 7
Еще одна возможная причина может возникнуть в результате использования:
./manage.py testserver
И затем посетите интерфейс администратора. Это не сработает, потому что testerver создает полностью отдельную базу данных в памяти. Если вы хотите посетить интерфейс администратора, вам нужно использовать серверный сервер.
Ответ 8
была та же проблема, моя резолюция заключалась в том, чтобы просто добавить "django.contrib.comments" в INSTALLED_APPS и снова запустить ./manage.py syncdb
.
Ответ 9
У вас есть непримененные миграции. ваше приложение может работать неправильно до тех пор, пока оно не будет применено.
Запустите "python manage.py migrate", чтобы применить их.
python manage.py migrate Это работало для меня.
Ответ 10
создать схему и добавить ее имя под NAME в 'databases'
запустите manage.py syncdb
Ответ 11
Может, это не путь db. Просто добавьте это в свои settings.py:
import os
PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
#modify your db NAME as below:
'NAME': os.path.join(PROJECT_PATH,'mysite.sqlite3'),
Ответ 12
Я внес некоторые изменения в Model, которые не были правильно перенесены в db. Используя команду
manage.py makemigrations
исправлена моя проблема. Надеюсь, это поможет кому-то.
Ответ 13
У меня была аналогичная проблема для администрирования администратора. После нескольких проверок запустите "python manage.py migrate" без присвоения имени APP (получите "Применить все миграции:.....), затем запустите сервер и запустите в Интернете. Это сработало. Надеюсь, это поможет.
Ответ 14
syncdb
устаревший try python manage.py makemigrations
и python manage.py migrate
решил проблему, и не забудьте добавить имя приложения - это установленное приложение в settings.py
Ответ 15
У этой проблемы тоже. Перезапуск postgres и apache2 сделали это для меня. Заставляет меня задаться вопросом, остался ли какой-то процесс sqlite, который не был удален, пока вы не поиграли с файлами или чем-то еще.
Ответ 16
У меня была эта проблема в другом сценарии. Я новичок в Django и клонировал репозиторий из github, чтобы практиковать на нем. Файл db.sqlite3 также был скопирован. Но в нем не было django_session. Когда я сделал
./manage.py showmigrations
.. Я узнал, что были некоторые миграции. Но таблицы отсутствовали в sqlite, так как я никогда не мигрировал. Моя проблема была решена, когда я запустил команду migrate. Надеюсь, что это поможет новичкам django, как я.
./manage.py migrate
Ответ 17
Добавьте строку 'django.contrib.sessions',
в INSTALLED_APPS
Запустите команды из оболочки django
python manage.py makemigrations #check for changes
python manage.py migrate #apply changes in DbSQLite
python manage.py syncdb #sync with database
django_session появится в базе данных с помощью (session_key, session_data , expire_date)
Ответ 18
В моем случае мне пришлось стереть запись 'session' в таблице django_migrations, запустить makemigrations и выполнить миграцию после этого. Это создало таблицу django_session.
Ответ 19
Для меня это было то, что я обновил settings.py
, запустил миграцию, но процесс systemd все еще использовал SQLite
потому что я не перезагрузил его. Выполнение systemctl restart service_name
решило проблему.
Ответ 20
У меня была такая же проблема, поэтому я побежал
heroku run ls
и обнаружил, что файл db.sqlite3
отсутствует на сервере. В моем случае это произошло потому, что я .gitignore
его, добавив в файл .gitignore
.
Ответ 21
И это может быть случай, когда вы получаете эту ошибку, потому что вы забыли запустить запрос python manage.py migrate перед созданием супер пользователя
Ответ 22
Если вы устали от использования makemigrations и migrate, но ошибка такая же, нет такой таблицы django_session. Тогда просто взгляните на свой код где-то или на другой, который вы используете сессию или вызываете его. Просто закомментируйте код, в котором вы используете сессию, а затем выполните команду makemigrations и migrate соответственно. Это на 100% решает вашу проблему. Причиной этой ошибки является то, что вы удалили папку миграции и файл базы данных, по которой вы получаете эту ошибку. Не стесняйтесь спрашивать, если проблема не решается
Ответ 23
Это сработало для меня.
С https://docs.djangoproject.com/en/2.2/topics/http/sessions/
Использование поддерживаемых базой данных сеансов -
Если вы хотите использовать сеанс, поддерживаемый базой данных, вам нужно добавить "django.contrib.sessions" в настройку INSTALLED_APPS.
После настройки установки запустите manage.py migrate, чтобы установить единую таблицу базы данных, в которой хранятся данные сеанса.
Ответ 24
Это может произойти, если существуют перенесенные сеансы миграции.
У вас есть 17 не примененных миграций. Ваш проект может не работать должным образом пока вы не примените миграции для приложений: admin, auth, contenttypes, сессий.
Для запуска миграции вы можете использовать следующую команду:
python manage.py migrate
Это решит проблему.
Ответ 25
Запустите эту команду в cmd:
Python ./manage.py migrate --all
Он должен появиться на вашем db