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.

¿Por qué no se conecta a la base de datos de forma remota en Python?

Estoy escribiendo una aplicación en línea. Alquilé un hosting en TimeWeb, creé una base de datos en el hosting. Pude conectarme exitosamente a través de Putty, pero el problema es que necesito conectarme usando pycharm. No te sorprendas de que esté haciendo una conexión SSH aquí y no en la terminal SSH de pycharm, simplemente planeo crear un archivo .exe. Intenté especificar el puerto 3306 y la codificación utf8, pero aún así no funcionó. Entonces, ¿cuál es mi error?
“`
import paramiko
import pymysql
host = "x.x.x.x"
port = 22
username ="cv86943"
password = "xxxxxx"

ssh = paramiko.SSHClient()
ssh.set<em>missing</em>host<em>key</em>policy(paramiko.AutoAddPolicy())
ssh.connect(host,port,username,password)

print("1") #1 escribe, por lo que la conexión al hosting es exitosa
conn = pymysql.connect(host = "localhost",user = "cv86943<em>letter", password = "12345678", db = "cv86943</em>letter")

print("2") #Pero el 2 ya no se escribe
ssh.close()
<code>
**UPD: devuelve un error**
</code>
pymysql.err.OperationalError: (2003, "No se puede conectar al servidor MySQL en 'localhost' ([WinError 10061]…)
“`

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Basándose en el código proporcionado y el mensaje de error, el error parece estar en la configuración de la conexión. El código actual está intentando conectarse a la base de datos utilizando “localhost” como host, lo que significa que está intentando conectarse a la base de datos en la misma computadora donde se está ejecutando el script. Sin embargo, la base de datos está alojada en TimeWeb, lo que significa que el script debería conectarse a la dirección IP del servidor en lugar de “localhost”.

    Por lo tanto, la cadena de conexión para pymysql debe actualizarse para utilizar la dirección IP correcta del host. El código actualizado debería verse así:

    import paramiko
    import pymysql
    
    db_host = "x.x.x.x" # Reemplazar con la dirección IP actual del host
    ssh_port = 22
    ssh_username = "cv86943"
    ssh_password = "xxxxxx"
    
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(db_host, ssh_port, ssh_username, ssh_password)
    
    print("1") # 1 = éxito en la conexión al alojamiento
    
    db_user = "cv86943_letter"
    db_password = "12345678"
    db_name = "cv86943_letter"
    db_port = 3306 # Reemplazar con el número de puerto de la base de datos correcto
    db_charset = "utf8mb4" # Reemplazar con la codificación correcta de la base de datos
    
    conn = pymysql.connect(host=db_host, port=db_port, user=db_user, password=db_password, db=db_name, charset=db_charset)
    
    print("2") # Debería escribirse ahora
    ssh.close()
    

    Tenga en cuenta que este código supone que el puerto de la base de datos correcto y la codificación son 3306 y utf8mb4, respectivamente. Si esos valores son diferentes, deben actualizarse en consecuencia.

Comments are closed.