Tengo problemas para conectarme a la base de datos de Azure postgres desde python. Estoy siguiendo la guía aquí: https://docs.microsoft.com/cs-cz/azure/postgresql/connect-python Tengo básicamente el mismo código para configurar la conexión. Pero psycopg2 y SQLalchemy me arrojan el mismo error:
OperationalError: server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request.Puedo conectarme a la instancia mediante otras herramientas de cliente como dbeaver, pero desde python no funciona.
Cuando investigo en los registros de Postgres, puedo ver que el servidor realmente autorizó la conexión, pero la siguiente línea dice
could not receive data from client: An existing connection was forcibly closed by the remote host.Python es 3.7 La versión de psycopg es 2.8.5 La región de Azure Postgres está en Europa Occidental
¿Alguien tiene alguna sugerencia sobre qué debo intentar para que funcione?
¡Gracias!
EDITAR: El problema se resolvió solo. Probé la misma configuración unos días después y comenzó a funcionar. Podría haber habido algún problema con Azure West Europe.
Yo también tuve este problema. Creo que leí en alguna parte (no recuerdo dónde) que Azure tiene un problema con el @ que debe para el nombre de usuario (usuario@nombreDeServidor).
Creé variables y una cadena f y luego funcionó bien.
import sqlalchemy username = 'user@server_name' password = 'PassWord!' host = 'server_name.postgres.database.azure.com' database = 'your_database' conn_str = f'postgresql+psycopg2://{username}:{password}@{host}/{database}'Después:
engine = sqlalchemy.create_engine(conn_str, pool_pre_ping=True) conn = engine.connect()Pruébelo con una declaración SQL simple.
sql = 'SELECT * FROM public.some_table;' results = conn.engine.execute(sql)Esta fue una conexión en el sur del Reino Unido. Antes sí se quejaba de que el formato del nombre de usuario tenía que usar @, aunque el nombre de usuario era correcto, como se probó desde la línea de comandos con PSQL y otro cliente SQL.