Ошибка 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-клиент

Вернуться на верх