Non uso postgres, quindi spero che questo sia vero per te.
SQLAlchemy prende le informazioni che fornisci nell'url e le passa alla libreria dbapi sottostante che è anche specificata nell'url, nel tuo caso è psycopg2.
Il tuo engine
l'istanza si connette al database solo quando necessario e sqlalchemy passa semplicemente le informazioni di connessione al driver specificato nell'URL che restituisce una connessione utilizzata da sqlalchemy.
Perdona che questo è mysql, ma dovrebbe essere fondamentalmente lo stesso per te:
>>> 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>
Chiamando engine.connect()
restituisce un sqlalchemy.engine.base.Connection
istanza che ha una proprietà di connessione connection property
per cui la docstring dice:
Tuttavia, puoi vedere dall'alto che in realtà restituisce un sqlalchemy.pool._ConnectionFairy
oggetto che dalla sua docstring:
Ecco il __init__()
metodo della fata della connessione, e come puoi vedere ha una connection
attributo che è l'effettiva connessione dbapi sottostante.
def __init__(self, dbapi_connection, connection_record, echo):
self.connection = dbapi_connection
self._connection_record = connection_record
self._echo = echo
Quanto alle informazioni disponibili sull'oggetto di connessione dbapi, dipende dall'implementazione di quel particolare driver. Ad esempio, gli oggetti di connessione psycopg2 hanno un info
attributo:
Quelle info
l'oggetto ha attributi come ssl_in_use
:
E ssl_attribute
:
Quindi non devi scavare troppo in profondità per ottenere la connessione db effettiva per vedere cosa sta realmente succedendo.
Inoltre, se vuoi assicurarti che tutte le connessioni client siano SSL, puoi sempre force them to
.