Как я могу изменить Django db на MySQL на pythonanywhere?

Я думал, что это будет просто из-за этого учебника по MySQL от pythonanywhere, но я все еще возникли проблемы с переключением с sqlite3. Я новичок в базах данных SQL, и я проверял другие вопросы о стеке, но я не уверен, куда еще идти отсюда. Вот что я сделал до сих пор.

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '3DPrince$ubodb',
        'USER': '3DPrince',
        'PASSWORD': 'secretpassword',
        'HOST': '3DPrince.mysql.pythonanywhere-services.com',
    },
}

Я также выполнил следующее, чтобы попытаться синхронизировать базу данных.
manage.py makemigrations
manage.py migrate

Я все еще получаю сообщение об ошибке
(1146, "Table '3DPrince$ubodb.django_site' doesn't exist")
Я не знаю, что еще делать дальше, и я не знаю, как выполнять какие-либо проверки из консоли mysql bash.

Может ли кто-нибудь указать, что я делаю неправильно? Или, может быть, какие-то полезные команды mysql bash для проверки соединения или ручного переделывания базы данных?


person RknRobin    schedule 20.12.2016    source источник
comment
Проверьте, решает ли этот ответ вашу проблему.   -  person Selcuk    schedule 20.12.2016


Ответы (2)


Похоже, что-то пошло не так с миграцией. Я бы порекомендовал вам выполнить следующие шаги, которые воссоздают ваш файл db.

  1. Сделайте резервную копию ваших данных в базе данных!!!

  2. Подключитесь к удаленной базе данных:

    $ mysql -h 3DPrince.mysql.pythonanywhere-services.com -u 3DPrince -p
    
  3. Удалите текущую базу данных и создайте ее снова:

    drop database `3DPrince$ubodb`;
    
    create database `3DPrince$ubodb`;
    
  4. Локально (на вкладке другого терминала) перенесите свой проект django:

    $ python manage.py migrate
    
  5. Проверьте (во вкладке, где вы подключены к удаленной базе данных), правильно ли созданы все таблицы:

    use `3DPrince$ubodb`;
    
    show tables;
    

Если что-то пойдет не так, вы увидите предупреждения или ошибки.

А также вам не нужно делать python manage.py makemigrations все время, потому что эта команда только создает файлы миграции. (они хранятся в yourproj/yourapp/migrations) и ничего не делает для взаимодействия с реальной базой данных. Если вы не изменяете свой проект, вам фактически не нужно заново создавать файлы миграции.

person Fomalhaut    schedule 20.12.2016
comment
Когда я запускаю migrate, он возвращает «Операции для выполнения: применить все миграции: allmyapps Запуск миграций: нет применимых миграций». Похоже, что миграция не выполняется. - person RknRobin; 20.12.2016
comment
Если я зайду в оболочку Django и запущу from django.conf import settings и проверю settings.DATABASES, он все равно скажет, что я работаю на sqlite3. Мог ли я перейти на правильный db (или файл settings.py?) в моем файле WSGI, но не где-то еще в моем коде? - person RknRobin; 20.12.2016

Приведенные выше шаги помогли мне отладить мою ошибку. Оказывается, мой сервер все еще распознавал предыдущий файл настроек, который я использовал, в то время как мой интерфейс искал новый файл MYSQL, на который я переключился для производства. Все, что я сделал, это закомментировал БАЗЫ ДАННЫХ из файла development settings.py и снова выполнил миграцию, и это сработало.

person RknRobin    schedule 21.12.2016