No uso postgres, así que espero que esto sea cierto para ti.
SQLAlchemy toma la información que proporciona en la URL y la pasa a la biblioteca dbapi subyacente que también se especifica en la URL, en su caso es psycopg2.
Su motor
la instancia solo se conecta a la base de datos cuando es necesario, y sqlalchemy simplemente pasa la información de conexión al controlador especificado en la URL que devuelve una conexión que usa sqlalchemy.
Perdone que esto sea mysql, pero debería ser fundamentalmente lo mismo para usted:
>>> engine
Engine(mysql+mysqlconnector://test:***@localhost/test)
>>> conn = engine.connect()
>>> conn
<sqlalchemy.engine.base.Connection object at 0x000001614ACBE2B0>
>>> conn.connection
<sqlalchemy.pool._ConnectionFairy object at 0x000001614BF08630>
>>> conn.connection.connection
<mysql.connector.connection_cext.CMySQLConnection object at 0x000001614AB7E1D0>
Llamando a engine.connect()
devuelve un sqlalchemy.engine.base.Connection
instancia que tiene una propiedad de conexión
para lo cual la cadena de documentación dice:
Sin embargo, puede ver desde arriba que en realidad devuelve un sqlalchemy.pool._ConnectionFairy
objeto que de su cadena de documentación:
Aquí está el __init__ ()
método del hada de la conexión, y como puedes ver tiene una conexión
atributo que es la conexión dbapi subyacente real.
def __init__(self, dbapi_connection, connection_record, echo):
self.connection = dbapi_connection
self._connection_record = connection_record
self._echo = echo
En cuanto a qué información está disponible en el objeto de conexión dbapi, depende de la implementación de ese controlador en particular. Por ejemplo, los objetos de conexión psycopg2 tienen un info
atributo:
Esa información
el objeto tiene atributos como ssl_in_use
:
Y ssl_attribute
:
Por lo tanto, no tiene que profundizar demasiado para llegar a la conexión de base de datos real y ver lo que realmente está sucediendo.
Además, si desea asegurarse de que todas las conexiones de los clientes sean SSL, siempre puede obligarlos a
.