PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

SQLAlchemy verifica la connessione SSL

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 .