Ошибка NameError: имя '_mysql' не определено в Mac Django
Я пытался запустить python manage.py запустить сервер во время работы с Django после изменения моего settings.py из этого:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
к этому:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'storefront',
}
}
Но я получал эту ошибку:
File "/Users/aditi/.local/share/virtualenvs/storefront-4vgosAeV/lib/python3.12/site-packages/django/db/backends/mysql/base.py", line 16, in <module>
import MySQLdb as Database
File "/Users/aditi/.local/share/virtualenvs/storefront-4vgosAeV/lib/python3.12/site-packages/MySQLdb/__init__.py", line 24, in <module>
version_info, _mysql.version_info, _mysql.__file__
^^^^^^
NameError: name '_mysql' is not defined
This is what my __init__.py looks like:
try:
from MySQLdb.release import version_info
from . import _mysql
assert version_info == _mysql.version_info
except Exception:
raise ImportError(
"this is MySQLdb version {}, but _mysql is version {!r}\n_mysql: {!r}".format(
version_info, _mysql.version_info, _mysql.__file__
)
)
Я скачал MySQL по этой ссылке, опция x86 DMG: https://dev.mysql.com/downloads/mysql/
У меня Sonoma 14.3. Я использую Python 3.12.7. Пожалуйста, дайте мне знать, как я могу исправить эту ошибку.
Я попытался добавить это в свой файл .zshrc:
export PATH="/usr/local/mysql/bin:$PATH"
Но это не сработало.
Либо "from MySQLdb.release import version_info", либо "from . импортировать _mysql" завершается ошибкой, и _mysql не определен в вашем блоке except. Было бы лучше изменить ваш инициализатор.py на что-то вроде этого:
from MySQLdb.release import version_info
from . import _mysql
if version_info != _mysql.version_info:
raise ImportError(
"this is MySQLdb version {}, but _mysql is version {!r}\n_mysql: {!r}".format(
version_info, _mysql.version_info, _mysql.__file__
)
)
По крайней мере, вы увидите, какой импорт завершился неудачно и, возможно, почему.
Если вы используете клиент mysql из пакета python, вам все равно необходимо установить клиент mysql из Oracle/MySQL. Он содержит C-библиотеку, которую использует пакет python. Чтобы еще больше запутать ситуацию: пакет python на самом деле написан на C для увеличения скорости.
Чтобы установить эту библиотеку на macOS:
% brew устанавливает mysql-клиент