Ik gebruik geen postgres, dus hopelijk geldt dit ook voor jou.
SQLAlchemy neemt de informatie die u in de url opgeeft en geeft deze door aan de onderliggende dbapi-bibliotheek die ook in de url is gespecificeerd, in uw geval is het psycopg2.
Uw engine
instantie maakt alleen verbinding met de database als dat nodig is, en sqlalchemy geeft de verbindingsinformatie gewoon door aan het stuurprogramma dat is opgegeven in de url, die een verbinding retourneert die sqlalchemy gebruikt.
Vergeef me dat dit mysql is, maar zou in principe hetzelfde moeten zijn voor jou:
>>> 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>
engine.connect()
. aanroepen retourneert een sqlalchemy.engine.base.Connection
instantie met een verbindingseigenschap
waarvoor de docstring zegt:
U kunt echter van bovenaf zien dat het in feite een sqlalchemy.pool._ConnectionFairy
retourneert object dat uit zijn docstring:
Hier is de
methode van de verbindingsfee, en zoals je kunt zien heeft het een verbinding
attribuut dat de werkelijke onderliggende dbapi-verbinding is.
def __init__(self, dbapi_connection, connection_record, echo):
self.connection = dbapi_connection
self._connection_record = connection_record
self._echo = echo
Welke informatie beschikbaar is over het dbapi-verbindingsobject, hangt af van de implementatie van dat specifieke stuurprogramma. psycopg2-verbindingsobjecten hebben bijvoorbeeld een info
kenmerk:
Die info
object heeft attributen zoals ssl_in_use
:
En ssl_attribute
:
U hoeft dus niet te diep te graven om bij de daadwerkelijke db-verbinding te komen om te zien wat er werkelijk aan de hand is.
Als u er zeker van wilt zijn dat alle clientverbindingen ssl zijn, kunt u altijd dwing ze om
.