2098

Подключение Django к MySQL

28 ответов

Доброго времени суток всем )

Пробую создать первый проект на Django, и сразу уперся в такой вопрос:

Вся пока конфигурация стандартна, только что развернута.

В файлу settings.py убираю настройки SQLite прописываю настройки MySQL:

"""
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
"""

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'cd887xx_xx',
'USER': 'cd887xx_xx',
'PASSWORD': 'Password',
'HOST': 'localhost',
'PORT': '',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
}
}
}

В итоге все перестает работать.

Т.е. с базовыми настройками выдет страницу админки Django, с настройками для MySQL выдает:

"Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator at info@timeweb.ru to inform them of the time this error occurred, and the actions you performed just before this error. More information about this error may be available in the server error log."

Если меняю обратно опять все ОК. 

Запускаю runserver ошибок не выдает.

В техподдержку обращался, ответ такой:

"mod_wsgi (pid=54709): Target WSGI script '/home/c/cd887xx/public_html/index.wsgi' cannot be loaded as Python module.
Проведя поверхностную проверку, настройки окружения, не обнаружил, что вызывает данную ошибку."

Уже пару дней не могу ответ найти, что это такое может быть. И не могу понять, как вообще настройка подключения к БД в setting.py может влиять на загрузку файла index.wsgi.

Может кто сталкивался с подобным? 


 

 

Ответы (28)

Rosh1ck +28
08.12.2020 10:14
"mod_wsgi (pid=54709): Target WSGI script '/home/c/cd887xx/public_html/index.wsgi' cannot be loaded as Python module"

Мне кажется, что это не весь вывод ошибки. Попробуйте выполнить в директории сайта:
python index.wsgi
Свернуть ответы
Stanislav +5
08.12.2020 11:46
Да лог ошибки вот-такой полностью:
Dec 1 18:07:52 vh298 apache_error[66675]: cd887xx.tmweb.ru [Tue Dec 01 15:07:52 2020] [error] [pid 54709] src/server/mod_wsgi.c(3692): [client 188.242.63.122:56666] mod_wsgi (pid=54709): Target WSGI script '/home/c/cd887xx/public_html/index.wsgi' cannot be loaded as Python module.
Dec 1 18:07:52 vh298 apache_error[66675]: cd887xx.tmweb.ru [Tue Dec 01 15:07:52 2020] [error] [pid 54709] src/server/wsgi_logger.c(630): [client 188.242.63.122:56666] mod_wsgi (pid=54709): Exception occurred processing WSGI script '/home/c/cd887xx/public_html/index.wsgi'.

При выполнении python index.wsgi не происходит совсем ничего (а что должно выводиться?)

Last login: Tue Dec 8 11:27:08 2020 from 92.53.116.153
cd887xx@vh298:~$ source myenv/bin/activate
(myenv) cd887xx@vh298:~$ cd public_html
(myenv) cd887xx@vh298:~/public_html$ python index.wsgi
(myenv) cd887xx@vh298:~/public_html$ python index.wsgi
(myenv) cd887xx@vh298:~/public_html$
Rosh1ck +28
08.12.2020 12:32
Как правило, интерпретатор python выводит больше информации об ошибке. Например, номера строк, где произошла ошибка или имя модуля.

Вы выполняли python index.wsgi после переключения на MySQL? Если нет, то стоит сначала переключиться на MySQL, потом выполнить команду. Я предложил выполнить эту команду в надежде получить более подробный вывод об ошибке.
Stanislav +5
08.12.2020 12:39
Это понимаю. Но в том и проблема что ошибок нигде нет вижу. Только то что техподдержка прислала с сервера ( то что переслал). При этом ничего не работает.
Да сейчас MySQL стоит в настройках. Обратно пока не возвращал.
В любом случае спасибо за ответ.)
Rosh1ck +28
08.12.2020 12:53
У меня пока только одно предположение, что дело в каком-то модуле, но это только предположение.

На всякий случай проверьте, что у вас есть модуль для работы с MySQL и используется совместимая версия python.

По этому логу, увы, сложно точно указать на проблему.
Stanislav +5
08.12.2020 12:56
Хорошо, спасибо, буду проверять
Rosh1ck +28
08.12.2020 12:56
Под модулем я имел ввиду mysqlclient, пример перехода: https://dev.to/chanyayun/django-switch-from-sqlite3-to-mysql-2i6o
Stanislav +5
08.12.2020 16:25
Нет, тоже не работает )
И вроде все нормально:
(myenv) cd887xx@vh298:~/public_html/Much$ pip install mysqlclient
Requirement already satisfied: mysqlclient in /home/c/cd887xx/myenv/lib/python3.6/site-packages (2.0.1)
(myenv) cd887xx@vh298:~/public_html/Much$ python --version
Python 3.6.9
(myenv) cd887xx@vh298:~/public_html/Much$ python -m django --version
3.1.3
(myenv) cd887xx@vh298:~/public_html/Much$

Странно конечно. Как вообще они логически связаны смена привязки БД (пустой, новой) в setting.py и отваливающийся index.wsgi....
Rosh1ck +28
09.12.2020 10:46
И все же) Я думаю, что предоставленный раннее лог - это только часть. Если вы пользователь хостинга, то попробуйте заказать error_log через личный кабинет
Stanislav +5
09.12.2020 11:05
Да вы правы, я вчера это сделал, лог прислали действительно не весь, было еще это:
File "/home/c/cd887xx/myenv/lib/python3.6/site-packages/django/db/backends/mysql/introspection.py", line 27, in DatabaseIntrospection
FIELD_TYPE.JSON: 'JSONField',
AttributeError: module 'MySQLdb.constants.FIELD_TYPE' has no attribute 'JSON'
Как почитал это связано с версионностью. Попробовал новые рекомендации, но все равно не очень помогает.
В общем в конечном итоге решил все удалить, и заново попробовать настроить. ))
Спасибо за поддержку!
Stanislav +5
09.12.2020 11:00
Да вы правы, я вчера это сделал, лог прислали действительно не весь, было еще это:
File "/home/c/cd887xx/myenv/lib/python3.6/site-packages/django/db/backends/mysql/introspection.py", line 27, in DatabaseIntrospection
FIELD_TYPE.JSON: 'JSONField',
AttributeError: module 'MySQLdb.constants.FIELD_TYPE' has no attribute 'JSON'
Как почитал это связано с версионностью. Попробовал новые рекомендации, но все равно не очень помогает.
В общем в конечном итоге решил все удалить, и заново попробовать настроить. ))
Спасибо за поддержку!
Свернуть ответы
Rosh1ck +28
09.12.2020 11:03
Успехов вам с проектом)
Stanislav +5
14.12.2020 16:20
Доброго дня ))

В общем если интересно, решили проблему.

Теперь понятно в чем суть, вариант решения путем обновления mysqlclient. При этом я его рассматривал и делал. Но делал его в виртуальной среде! Там у меня стоит последняя версия, как и у Романа.
А нужно было сделать обновление сразу из под аккаунта, и тогда все работает.
Rosh1ck +28
14.12.2020 20:14
Доброго дня!)

Спасибо, что поделились решением. Предлагаю вам тогда отметить ваш ответ как решение, чтобы другие коллеги могли увидеть его визуально)
Роман +3
09.12.2020 20:32
Такая же проблема. В итоге какое решение нашлось?
Package Version
----------- -------
asgiref 3.3.1
Django 3.1.4
jsonfield 3.1.0
mysql 0.0.2
mysqlclient 2.0.1
pip 20.3.1
pytz 2020.4
setuptools 51.0.0
sqlparse 0.4.1
wheel 0.36.1

С таким списком пакетов - не работает. На stackowerflow рекомендация была обновить mysqlclient до версии 2.0.1 - не помогло.

Версия питона что ли не такая?
Stanislav +5
09.12.2020 20:37
Нет, как и говорил, все переустанавливаю заново, но пока не сделал. Что это было так и не понял. Если после переустановки проблема появиться снова, буду изучать дальше. Найду решение отпишусь.
Rosh1ck +28
10.12.2020 16:34
Ошибка один в один? Тоже:

AttributeError: module 'MySQLdb.constants.FIELD_TYPE' has no attribute 'JSON'
Роман +3
10.12.2020 16:46
Тут похоже есть какая-то несовместимость, м.б. с версией питона, но на данном тарифном плане, как я понял нет возможности самостоятельно устанавливать что-то, поэтому я перешел на vds - там все работает, правда с postgres, а не mysql
Rosh1ck +28
10.12.2020 16:49
А раннее вы были на виртуальном хостинге? Там можно установить библиотеки, но через виртуальное окружение: https://timeweb.com/ru/help/pages/viewpage.action?pageId=10289298

Очень хорошо, что все заработало :)
Роман +3
10.12.2020 17:00
Сами библиотеки, да - но версию питона, как я понял нельзя установить самостоятельно другую. Возможно, не хватает просто знаний. В общем, как-то мне показалось лучше перейду на vds и там уже сам себе хозяин. Решение может быть и есть другое.
Rosh1ck +28
10.12.2020 17:01
Да, по поводу версии все так. Только уже установленные
Станислав, добрый день. Подскажите, как конкретно решить проблему. Вы пишите об обновлении mysqlclient из под аккаунта. Но как это сделать? Ведь нельзя без прав на root.
Свернуть ответы
Rosh1ck +28
09.01.2021 14:23
Вы пользуетесь виртуальным хостингом? Там есть возможность устанавливать библиотеки через виртуальное окружения. Для этого не нужны будут права root.
Afa +4
15.03.2021 20:45
Расшифруйте, пожалуйста, как была решена проблема? У меня идентичны лог, однако обновление mysql ни до версии 2.0.1 ни до версии 2.0.3. не помогает.
Свернуть ответы
Afa +4
15.03.2021 20:54
опечатка: mysqlclient разумеется.
Afa 0
15.03.2021 22:36
И подскажите, пожалуйста, как вот это сделать, указанное как решение вопроса:

"Теперь понятно в чем суть, вариант решения путем обновления mysqlclient. При этом я его рассматривал и делал. Но делал его в виртуальной среде! Там у меня стоит последняя версия, как и у Романа.
А нужно было сделать обновление сразу из под аккаунта, и тогда все работает.

Решение вопроса"

, если установка любых пакетов доступна только через виртуальное окружение?
Eugene 0
29.03.2021 20:03
Удалось решить или расшифровать решение?
У меня такая же проблема, шаред хостинг, поэтому могу только в виртуальном окружении могу пакеты обновлять. Методично попробовал разные версии mysqlclient, начиная от 1.4.0, поскольку django начинает работать только с этой, но ничего не помогло.
Afa +4
18.06.2021 10:58
!!! РЕШЕНИЕ ПРОБЛЕМЫ:
в файл index.wsgi (наверх после импортов) добавить строчку: sys.path.remove('/usr/lib/python3/dist-packages')
Это исключит путь к необновленному пакету, который висит на сервере, и будет искать фал в пакетах вашего виртуального окружения (где он есть).
И не забываем "pip install mysqlclient"

Похожие вопросы

Долго открывается сайт и его разделы

Здравствуйте. Разрабатываем мультисайт с поддоменами на wordpress и заметили, что переходы по разделам сайта и переходы на другие поддомены довольно долго открываются. Кеширование включено, картинки тоже оптимизируем, но сайт всё равно долго...
Avraham Avniloff
89

Не работает Web Service

Доброго всем времени суток)) Вчера игрался с созданием баз данных SQL, созданием папок, и запуском  wordpress. Примерно, после создание и стирания папок в колличестве 30-50, и дургих операций, web service видимо отключили(ся) и перестал запускатся wordpress,...
Умар Омаров
117

Обновить файлы через Github

Добрый день, мои файлы которые находятся на хостинге различаются с локальными файлами, кроме самого сайта(фронтенд и бэкенд),  а именно различаются:  -виртуальное окружение, -конфигурация файлов settings.py -конфигурация файлов...
С помощью соцсетей
У меня нет аккаунта Зарегистрироваться
Нажимая кнопку «Зарегистрироваться», я даю согласие на обработку своих персональных данных, указанных в форме регистрации.
С помощью соцсетей
У меня уже есть аккаунт Войти
Нажимая кнопку «Зарегистрироваться», я даю согласие на обработку своих персональных данных, указанных в форме регистрации.
Инструкции по восстановлению пароля высланы на Ваш адрес электронной почты.
Пожалуйста, укажите email вашего аккаунта