Nie używam postgresa, więc mam nadzieję, że to dotyczy Ciebie.
SQLAlchemy pobiera informacje podane w adresie URL i przekazuje je do podstawowej biblioteki dbapi, która jest również określona w adresie URL, w twoim przypadku jest to psycopg2.
Twój silnik
instancja łączy się z bazą danych tylko wtedy, gdy jest to potrzebne, a sqlalchemy po prostu przekazuje informacje o połączeniu do sterownika określonego w adresie URL, który zwraca połączenie używane przez sqlalchemy.
Wybacz, że to jest mysql, ale dla Ciebie powinien być zasadniczo taki sam:
>>> 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>
Wywołanie engine.connect()
zwraca sqlalchemy.engine.base.Connection
wystąpienie, które ma
dla których dokumentacja mówi:
Jednak widać z góry, że faktycznie zwraca sqlalchemy.pool._ConnectionFairy
obiekt, który z jego docstringu:
Oto
metoda wróżki połączenia i jak widać ma ona połączenie
atrybut, który jest rzeczywistym podstawowym połączeniem dbapi.
def __init__(self, dbapi_connection, connection_record, echo):
self.connection = dbapi_connection
self._connection_record = connection_record
self._echo = echo
To, jakie informacje są dostępne w obiekcie połączenia dbapi, zależy od implementacji tego konkretnego sterownika. Np. obiekty połączenia psycopg2 mają info
atrybut:
Te informacje
obiekt ma atrybuty takie jak ssl_in_use
:
Oraz ssl_attribute
:
Nie musisz więc kopać zbyt głęboko, aby uzyskać rzeczywiste połączenie z bazą danych, aby zobaczyć, co się naprawdę dzieje.
Ponadto, jeśli chcesz mieć pewność, że wszystkie połączenia klientów są SSL, zawsze możesz wymuś ich
.