Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

421
Views
NameError: el nombre '_mysql' no está definido después de configurar el cambio a mysql

Tengo un blog de Django en ejecución con sqlite3 db en mi máquina local. lo que quiero es

  1. convertir sqlite3 db a mysql db
  2. cambie el archivo Django settings.py para servir MySQL db

Antes de dar con el primer paso, salté al segundo primero. Seguí esta página web (en MacOS). Creé bases de datos llamadas djangolocaldb en el usuario raíz y tengo esa información en /etc/mysql/my.cnf así:

 # /etc/mysql/my.cnf [client] database=djangolocaldb user=root password=ROOTPASSWORD default-character-set=utf8

Por supuesto, creé db, pero no una tabla dentro de él.

 mysql> show databases; +--------------------+ | Database | +--------------------+ | djangolocaldb | | employees | | information_schema | | mydatabase | | mysql | | performance_schema | | sys | +--------------------+ 7 rows in set (0.00 sec)

Cambié settings.py así como sugirió la página web. Así es cómo:

 # settings.py ... # Database # https://docs.djangoproject.com/en/3.0/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 'OPTIONS' : { 'read_default_file': '/etc/mysql/my.cnf', } } } ...

Ahora, cuando ejecuté python manage.py runserver con mi venv activado, obtuve un rastreo brutal como este (ejecuté python manage.py migrate primero, y el rastreo se veía casi igual de todos modos):

 (.venv) ➜ django-local-blog git:(master) ✗ python manage.py runserver Watching for file changes with StatReloader Exception in thread django-main-thread: Traceback (most recent call last): File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/MySQLdb/__init__.py", line 18, in <module> from . import _mysql ImportError: dlopen(/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/MySQLdb/_mysql.cpython-37m-darwin.so, 2): Library not loaded: @rpath/libmysqlclient.21.dylib Referenced from: /Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/MySQLdb/_mysql.cpython-37m-darwin.so Reason: image not found During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/gwanghyeongim/.pyenv/versions/3.7.6/lib/python3.7/threading.py", line 926, in _bootstrap_inner self.run() File "/Users/gwanghyeongim/.pyenv/versions/3.7.6/lib/python3.7/threading.py", line 870, in run self._target(*self._args, **self._kwargs) File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/utils/autoreload.py", line 53, in wrapper fn(*args, **kwargs) File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/core/management/commands/runserver.py", line 109, in inner_run autoreload.raise_last_exception() File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/utils/autoreload.py", line 76, in raise_last_exception raise _exception[1] File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 357, in execute autoreload.check_errors(django.setup)() File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/utils/autoreload.py", line 53, in wrapper fn(*args, **kwargs) File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/__init__.py", line 24, in setup apps.populate(settings.INSTALLED_APPS) File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/apps/registry.py", line 114, in populate app_config.import_models() File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/apps/config.py", line 211, in import_models self.models_module = import_module(models_module_name) File "/Users/gwanghyeongim/.pyenv/versions/3.7.6/lib/python3.7/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1006, in _gcd_import File "<frozen importlib._bootstrap>", line 983, in _find_and_load File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 677, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 728, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/contrib/auth/models.py", line 2, in <module> from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/contrib/auth/base_user.py", line 47, in <module> class AbstractBaseUser(models.Model): File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/db/models/base.py", line 121, in __new__ new_class.add_to_class('_meta', Options(meta, app_label)) File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/db/models/base.py", line 325, in add_to_class value.contribute_to_class(cls, name) File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/db/models/options.py", line 208, in contribute_to_class self.db_table = truncate_name(self.db_table, connection.ops.max_name_length()) File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/db/__init__.py", line 28, in __getattr__ return getattr(connections[DEFAULT_DB_ALIAS], item) File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/db/utils.py", line 207, in __getitem__ backend = load_backend(db['ENGINE']) File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/db/utils.py", line 111, in load_backend return import_module('%s.base' % backend_name) File "/Users/gwanghyeongim/.pyenv/versions/3.7.6/lib/python3.7/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 16, in <module> import MySQLdb as Database File "/Users/gwanghyeongim/Documents/py/coreyMS_pj/django-local-blog/.venv/lib/python3.7/site-packages/MySQLdb/__init__.py", line 24, in <module> version_info, _mysql.version_info, _mysql.__file__ NameError: name '_mysql' is not defined

Entonces este NameError: name '_mysql' is not defined es el problema. Instalé mysqlclient antes, cambié settings.py , hice db en mysql, pero ninguno de los pasos lo hizo útil todavía.

Y noté que incluso cambié mi settings.py de nuevo a sqlite3, mi blog escupe el mismo error _mysql no definido . Así que terminé revirtiendo mi compromiso y ahora estoy de vuelta en sqlite3 (al menos mi blog funciona con él).

Supongo que podría ser que no convertí los datos primero, pero no estoy 100% seguro de ello.

Cualquier sugerencia sería muy apreciada. ¡Gracias de antemano!

EDITADO el 18 de agosto de 2020

Si aún ve el error _mysql not defined cuando ejecuta python manage.py migrate de alguna manera, consulte las siguientes dos configuraciones.

  1. Si ve mysqlclient cuando ejecuta pip freeze en su entorno virtual de python así,
 (.venv) ➜ SqlDjango git:(master) ✗ pip freeze ... Django==3.0.8 mysqlclient==2.0.1 ...

asegúrese de haber instalado mysqlclient en su entorno virtual de python, no mysql-client . El primero admite python3, mientras que el último admite python2, lo que supongo que probablemente no sea lo que desea.

  1. Asegúrese de colocar la siguiente línea en su archivo de configuración de bash ( ~/.zshrc para zsh, o ~/.bashrc o ~/.bash_profile para bash, etc.)
 export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

Después de eso, aplique el cambio ejecutando source ~/.your_shell_config_file . Ver python manage.py migrate funciona.

over 4 years ago · Santiago Trujillo
16 answers
Answer question

0

Revertir de MySQL Server 8.xx a 5.7.x funcionó para mí.

Django es compatible con MySQL 5.5.x - 5.7.x. MySQL 8 y versiones posteriores no son compatibles.

Encontrado @ Django Docs

over 4 years ago · Santiago Trujillo Report

0

Acabo de tener un problema similar y no pude encontrar una solución durante horas.

 >>> import MySQLdb Traceback (most recent call last): File "/{path-to-venv}/lib/python3.7/site-packages/MySQLdb/__init__.py", line 18, in <module> from . import _mysql ImportError: /{path-to-venv}/lib/python3.7/site-packages/MySQLdb/_mysql.cpython-37m-arm-linux-gnueabihf.so: failed to map segment from shared object During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/{path-to-venv}/lib/python3.7/site-packages/MySQLdb/__init__.py", line 24, in <module> version_info, _mysql.version_info, _mysql.__file__ NameError: name '_mysql' is not defined

así que si alguien aquí es como yo y tiene virtualenv en una partición/disco montado, debe montarlo con exec , ese es todo el problema.

Vuelva a montar la partición con permiso ejecutable como se explica en: https://askubuntu.com/questions/311438/how-to-make-tmp-executable .

Si monta la unidad con fstab, consulte: https://askubuntu.com/questions/678857/fstab-doesnt-mount-with-exec .

(bueno, eso fue 10 horas de prueba y depuración bien gastadas jajaja)

over 4 years ago · Santiago Trujillo Report

0

Esto resolvió el problema para mí:

Dado que Python3 no puede conectarse con Python a través de mysqldb, debe instalar un módulo adicional para arreglar las cosas. la instalación de mysqlclient hizo que tuviera el mismo NameError: : name '_mysql' is not defined .

Sin embargo, al usar pymysql y agregar la línea de código pymysql.install_as_MySQLdb() en la parte superior de mi aplicación Flask , ¡logré que se ejecutara sin errores!

Más información sobre módulos mysql

over 4 years ago · Santiago Trujillo Report

0

Entonces, como una respuesta completa:

Si usa el paquete python mysqlclient , aún necesita instalar el cliente mysql desde Oracle/MySQL. Este contiene la biblioteca C que usa el paquete python. Para hacer las cosas más confusas: el paquete de python, de hecho, está escrito en C para aumentar la velocidad. Para instalar esta biblioteca en MacOS:

 % brew install mysql-client

También hay un paquete de Python puro , con una licencia MIT más atractiva, que puede ser una solución si su empresa o cliente no permite GPL. Sin embargo, no es oficialmente compatible y pueden ocurrir algunos errores sutiles entre versiones. YMMV.

over 4 years ago · Santiago Trujillo Report

0

Por lo tanto, estoy respondiendo a mi propia pregunta. Como mi blog tiene una base de datos, le di una oportunidad para hacer otro proyecto sin db, comenzar de nuevo.

Lo que noté fue que hay un problema al importar el módulo MySQLdb (submódulo de mysqlclient) con este rastreo: Library not loaded: @rpath/libmysqlclient.21.dylib .

Después de navegar unas horas, me di cuenta de que, por alguna razón, la configuración de seguridad de Mac evita que esto se importe correctamente.

En mysqlclient library github encontré un problema que informaba lo mismo que el mío. Sugiere que ejecute cp -r /usr/local/mysql/lib/* /usr/local/lib/ . Después de esto, configuré settings.py para django.db.backends.mysql , ejecuté python manage.py migrate y funcionó. Entonces, para una base de datos vacía, esta podría ser una solución. Sin embargo, todavía tengo problemas con la base de datos uno.

yo suelo

  • Mac OS Catalina 10.15.6
  • pyenv
over 4 years ago · Santiago Trujillo Report

0

Estaba enfrentando el mismo problema en mi MacOS (Big Sur) y lo solucioné haciendo esto cp -r /usr/local/mysql/lib/* /usr/local/lib/

over 4 years ago · Santiago Trujillo Report

0

esto funcionó para mí:

agregue esto a la RUTA:

 export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$PATH"
over 4 years ago · Santiago Trujillo Report

0

¡Esto hizo el trabajo por mí! Simplemente instale libmysqlclient-dev ( sudo apt-get install libmysqlclient-dev para Ubuntu). A veces, los archivos lib simplemente faltan incluso si acaba de instalar mysql. :)

over 4 years ago · Santiago Trujillo Report

0

Estoy de acuerdo con Melvyn.

puede ver el enlace de su biblioteca MySQL escribiendo como:

 (quantum) chaiyudeMacBook-Pro:quantum chaiyu$ python Python 3.8.7 (v3.8.7:6503f05dd5, Dec 21 2020, 12:45:15) [Clang 6.0 (clang-600.0.57)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import MySQLdb as Database Traceback (most recent call last): File "/Users/chaiyu/Envs/quantum/lib/python3.8/site-packages/MySQLdb/__init__.py", line 18, in <module> from . import _mysql ImportError: dlopen(/Users/chaiyu/Envs/quantum/lib/python3.8/site-packages/MySQLdb/_mysql.cpython-38-darwin.so, 2): Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib Referenced from: /Users/chaiyu/Envs/quantum/lib/python3.8/site-packages/MySQLdb/_mysql.cpython-38-darwin.so Reason: image not found During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/chaiyu/Envs/quantum/lib/python3.8/site-packages/MySQLdb/__init__.py", line 24, in <module> version_info, _mysql.version_info, _mysql.__file__ NameError: name '_mysql' is not defined

luego escribe:

 (quantum) chaiyudeMacBook-Pro:quantum chaiyu$ otool -L /Users/chaiyu/Envs/quantum/lib/python3.8/site-packages/MySQLdb/_mysql.cpython-38-darwin.so /Users/chaiyu/Envs/quantum/lib/python3.8/site-packages/MySQLdb/_mysql.cpython-38-darwin.so: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib (compatibility version 21.0.0, current version 21.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.250.1) (quantum) chaiyudeMacBook-Pro:quantum chaiyu$ ls -l /usr/local/opt/mysql/lib/libmysqlclient.21.dylib ls: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib: No such file or directory

y luego, encontré que la biblioteca MySQL vinculada no existe.

over 4 years ago · Santiago Trujillo Report

0

aunque usé _mysql durante 10 años, el sitio web de MySQL indica la forma recomendada para Python 3 en: https://dev.mysql.com/doc/connector-python/en/preface.html

La conversión puede llevar algún tiempo, pero para mí menos de una hora. Aquí un ejemplo con código nuevo:

 import mysql.connector cnx = mysql.connector.connect(user='mensfort', password='zhongcan', host='127.0.0.1', database='restaurant') cursor = cnx.cursor() cursor.execute('select dongle from personnel') for dongle in cursor: print(dongle) cursor.close() cnx.close()

Utilice su propia contraseña, nombre de base de datos, consultas, esto es solo un ejemplo.

Por favor, DESINSTALAR esto. Esto no funciona para mí:

 pip uninstall mysql-connector

INSTALE esto primero. Funciona muy bien:

 pip install mysql-connector-python
over 4 years ago · Santiago Trujillo Report

0

Tuve el mismo error y funcionó durante un tiempo. Hice una actualización en MacOS BigSur y luego dejó de funcionar con este error.

Para solucionar esto para mí, fue una simple desinstalación y reinstalación de Django y mysqlclient.

La desinstalación/reinstalación de solo mysqlclient no funcionó. También el orden puede ayudar. Aquí están los comandos en el orden en que lo hice:

 pip uninstall mysqlclient pip uninstall django pip install django pip install mysqlclient

Nota: esto instalará las últimas versiones, así que si tiene versiones específicas, asegúrese de instalar esas versiones.

over 4 years ago · Santiago Trujillo Report

0

Si está usando bash, use:

 open -t .bash_profile

y agrega lo siguiente:

 export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$PATH"

Si está usando Zsh, use:

 open -t ~/.zshrc

y agrega lo siguiente:

 export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$PATH"
over 4 years ago · Santiago Trujillo Report

0

esto funcionó para mí

 brew install mysql
over 4 years ago · Santiago Trujillo Report

0

para Mac

Suponga que está activando Python 3 venv

 brew install mysql pip install mysqlclient

para ejecutar ubuntu terminal

 sudo apt-get install python3-dev default-libmysqlclient-dev build-essential pip install mysqlclient

para # Red Hat / CentOS

 sudo yum install python3-devel mysql-devel pip install mysqlclient
over 4 years ago · Santiago Trujillo Report

0

Finalmente, después de pasar como una década en este tema, encontré una buena respuesta.

mysqlclient es una bifurcación compatible con Python 3 del controlador Python MySQL original, MySQLdb . Todavía proporciona un módulo de Python llamado MySQLdb . En la instalación, se compila contra la biblioteca del cliente MariaDB o la biblioteca del cliente MySQL, cualquiera que haya instalado.

Solución encontrada aquí por Adam (Genius Guy)

over 4 years ago · Santiago Trujillo Report

0

Desde Apple Silicon M1 Mac y un entorno conda, la única solución que funcionó para mí fue usar la instalación de Miniforge , que es comparable a Miniconda, pero con conda-forge como canal predeterminado. Hay una opción de Apple Silicon que me solucionó el problema: https://github.com/Haydnspass/miniforge#download

(Solución de https://towardsdatascience.com/using-conda-on-an-m1-mac-b2df5608a141 )

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!