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.

TypeError: MySQLConnectionAbstract.__init__() recibe 1 argumento posicional pero se proporcionaron 2.

Obtuve el siguiente error:

TypeError: MySQLConnectionAbstract.init() toma 1 argumento posicional pero se dieron 2

Aquí está mi db.py:
“`
import mysql.connector

localhost = “localhost”
username = “Admin”
password = “test123”
db = “testing”
Connect = “host='{}’, user='{}’, password='{}’, db='{}'”.format(localhost, username, password, db)

cnn = mysql.connector.connect(Connect) # línea 16 error

cnn = mysql.connector.connect(host=”localhost”, user=”Admin”, password=”test123″, db=”testing”)

Si escribo la conexión correctamente como sigue, entonces funciona.
cnn = mysql.connector.connect(host=”localhost”, user=”Admin”, password=”test123″, db=”testing”)

Sin embargo, no funcionará si escribo el código como sigue:
cnn = mysql.connector.connect(Connect)

Este es el error completo impreso en la terminal:

Traceback (most recent call last):
File “c:\Users\herok\Documents\MyApp 3\db.py”, line 16, in
cnn = mysql.connector.connect(Connect)
File “C:\Users\herok\AppData\Local\Programs\Python\Python310\lib\site-packages\mysql\connector__init__.py”, line 273, in connect
return MySQLConnection(*args, **kwargs)
File “C:\Users\herok\AppData\Local\Programs\Python\Python310\lib\site-packages\mysql\connector\connection.py”, line 72, in __init__
super(MySQLConnection, self).__init__(*args, **kwargs)
TypeError: MySQLConnectionAbstract.__init__() toma 1 argumento posicional pero se dieron 2

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El error se produce porque el método connect() de mysql.connector espera una serie de argumentos de palabras clave, pero en el código proporcionado se le pasa una variable de tipo string llamada Connect que contiene los argumentos formateados en una cadena.

    Para solucionar el error, reemplace la variable Connect por la serie de argumentos de palabras clave directamente en el método connect():

    cnn = mysql.connector.connect(host="localhost", user="Admin", password="test123", db="testing")
    

    Alternativamente, si es necesario utilizar la variable Connect, se puede utilizar el operador ** para desempaquetar los argumentos desde la cadena:

    cnn = mysql.connector.connect(**eval('dict({})'.format(Connect)))
    

    Esto convertirá la cadena Connect en un diccionario y desempaquetará los argumentos de palabras clave en el método connect(). Sin embargo, el uso de eval() puede ser peligroso y se recomienda utilizar la primera solución en su lugar.

Comments are closed.