es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python import MySQLdb en MacOS M1 no funciona.

Tengo Python 3.8.8, mysql y mysql-client instalados. También tengo instaladas las bibliotecas mysql-connector-python==8.0.26 y mysqlclient==2.1.0 utilizando pip.

Pero la línea:

python -c “import MySQLdb”

arroja este error:

Traceback (most recent call last):
  File "/Users/louisgabilly/anaconda3/envs/venv/lib/python3.8/site-packages/MySQLdb/__init__.py", line 18, in <module>
    from . import _mysql
ImportError: dlopen(/Users/louisgabilly/anaconda3/envs/venv/lib/python3.8/site-packages/MySQLdb/_mysql.cpython-38-darwin.so, 2): Symbol not found: _mysql_affected_rows
  Referenced from: /Users/louisgabilly/anaconda3/envs/venv/lib/python3.8/site-packages/MySQLdb/_mysql.cpython-38-darwin.so
  Expected in: flat namespace
 in /Users/louisgabilly/anaconda3/envs/venv/lib/python3.8/site-packages/MySQLdb/_mysql.cpython-38-darwin.so

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/Users/louisgabilly/anaconda3/envs/venv/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

Creo que este error se debe a MacOS M1.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que hay un problema al ejecutar import MySQLdb en un sistema MacOS M1, como indica el mensaje de error. Esto se debe a que el archivo _mysql.cpython-38-darwin.so hace referencia a un símbolo (_mysql_affected_rows) que no se puede encontrar en el espacio de nombres plano.

    Para resolver este problema, podemos intentar usar la biblioteca mysql-connector-python en lugar de MySQLdb. Esta biblioteca es compatible tanto con Python 3 como con MacOS M1. Podemos instalarla usando pip:

    pip install mysql-connector-python
    

    Luego, podemos usar el siguiente código para conectarnos a una base de datos MySQL:

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="tunombredeusuario",
      password="tupassword",
      database="tubasededatos"
    )
    
    mycursor = mydb.cursor()
    mycursor.execute("SELECT * FROM tutabla")
    
    myresult = mycursor.fetchall()
    
    for x in myresult:
      print(x)
    

    Este código utiliza mysql.connector.connect() para conectarse a una base de datos MySQL local y mycursor.execute() para ejecutar una consulta SQL. Luego, se imprimen los resultados.

    Alternativamente, si deseas seguir utilizando MySQLdb, puedes intentar reinstalarlo usando el siguiente comando:

    pip install mysqlclient==2.1.0 --install-option="--big-sur-macports-libraries"
    

    Este comando agrega una opción de instalación (--big-sur-macports-libraries) que permite que la biblioteca funcione en MacOS M1. Sin embargo, esta solución no está oficialmente respaldada por los mantenedores de la biblioteca y aún puede causar problemas.

Comments are closed.