python 名称“_mysql”未定义

정은지*_*정은지 3 python mysql django

我用python 3.7.10搭建了一个虚拟环境,\n通过安装mysql和mysqlclient\n是mysql 8.0.28,mysqlclient 2.1.0。

\n

运行 python manage.py migrate\n 时,结果如下:

\n
(test) \xe2\x9e\x9c  backend git:(main) python manage.py migrate\nTraceback (most recent call last):\n  File "/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/site-packages/MySQLdb/__init__.py", line 18, in <module>\n    from . import _mysql\nImportError: dlopen(/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/site-packages/MySQLdb/_mysql.cpython-37m-darwin.so, 0x0002): symbol not found in flat namespace '_mysql_affected_rows'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File "manage.py", line 22, in <module>\n    main()\n  File "manage.py", line 18, in main\n    execute_from_command_line(sys.argv)\n  File "/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line\n    utility.execute()\n  File "/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/site-packages/django/core/management/__init__.py", line 395, in execute\n    django.setup()\n  File "/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/site-packages/django/__init__.py", line 24, in setup\n    apps.populate(settings.INSTALLED_APPS)\n  File "/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/site-packages/django/apps/registry.py", line 114, in populate\n    app_config.import_models()\n  File "/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/site-packages/django/apps/config.py", line 301, in import_models\n    self.models_module = import_module(models_module_name)\n  File "/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/importlib/__init__.py", line 127, in import_module\n    return _bootstrap._gcd_import(name[level:], package, level)\n  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import\n  File "<frozen importlib._bootstrap>", line 983, in _find_and_load\n  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked\n  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked\n  File "<frozen importlib._bootstrap_external>", line 728, in exec_module\n  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed\n  File "/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/site-packages/django/contrib/auth/models.py", line 3, in <module>\n    from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager\n  File "/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/site-packages/django/contrib/auth/base_user.py", line 48, in <module>\n    class AbstractBaseUser(models.Model):\n  File "/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/site-packages/django/db/models/base.py", line 122, in __new__\n    new_class.add_to_class('_meta', Options(meta, app_label))\n  File "/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/site-packages/django/db/models/base.py", line 326, in add_to_class\n    value.contribute_to_class(cls, name)\n  File "/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/site-packages/django/db/models/options.py", line 207, in contribute_to_class\n    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())\n  File "/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/site-packages/django/utils/connection.py", line 15, in __getattr__\n    return getattr(self._connections[self._alias], item)\n  File "/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/site-packages/django/utils/connection.py", line 62, in __getitem__\n    conn = self.create_connection(alias)\n  File "/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/site-packages/django/db/utils.py", line 204, in create_connection\n    backend = load_backend(db['ENGINE'])\n  File "/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/site-packages/django/db/utils.py", line 111, in load_backend\n    return import_module('%s.base' % backend_name)\n  File "/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/importlib/__init__.py", line 127, in import_module\n    return _bootstrap._gcd_import(name[level:], package, level)\n  File "/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 15, in <module>\n    import MySQLdb as Database\n  File "/usr/local/Caskroom/miniforge/base/envs/test/lib/python3.7/site-packages/MySQLdb/__init__.py", line 24, in <module>\n    version_info, _mysql.version_info, _mysql.__file__\nNameError: name '_mysql' is not defined\n
Run Code Online (Sandbox Code Playgroud)\n

当我尝试重新安装它时,它说它已经安装了。\n我认为 python 找不到 mysql 路径。\n我查了很多问题,但无法解决我的问题。\n自从我第一次启动 python,我找不到原因。

\n

在此先感谢您的帮助。

\n

我从哪里开始发现问题?

\n

小智 13

这是因为MySQLdb中的mysql C库(_mysql*.so)版本与Python版本不兼容。激活虚拟环境并尝试以下操作:

 pip uninstall mysqlclient
 pip install mysqlclient --no-cache-dir
Run Code Online (Sandbox Code Playgroud)