Jeg bruger ikke postgres, så forhåbentlig gælder dette for dig.
SQLAlchemy tager de oplysninger, du angiver i url'en, og sender dem ned til det underliggende dbapi-bibliotek, der også er angivet i url'en, i dit tilfælde er det psycopg2.
Din motor
instans forbinder kun til databasen, når det er nødvendigt, og sqlalchemy sender blot forbindelsesoplysningerne videre til driveren angivet i url'en, som returnerer en forbindelse, som sqlalchemy bruger.
Tilgiv, at dette er mysql, men burde være grundlæggende det samme for dig:
>>> 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>
Kalder engine.connect()
returnerer en sqlalchemy.engine.base.Connection
forekomst, der har en
hvortil docstringen siger:
Du kan dog se ovenfra, at den faktisk returnerer en sqlalchemy.pool._ConnectionFairy
objekt, som fra dets docstring:
Her er L__7__5-code>in L__71__code>in" ()
metoden for forbindelsesfeen, og som du kan se har den en forbindelse
attribut, der er den faktiske underliggende dbapi-forbindelse.
def __init__(self, dbapi_connection, connection_record, echo):
self.connection = dbapi_connection
self._connection_record = connection_record
self._echo = echo
Med hensyn til hvilken information der er tilgængelig på dbapi-forbindelsesobjektet, afhænger det af implementeringen af den pågældende driver. Psycopg2-forbindelsesobjekter har f.eks. en info
attribut:
Den info
objektet har attributter såsom ssl_in_use
:
Og ssl_attribute
:
Så du behøver ikke at grave for dybt for at komme til selve db-forbindelsen for at se, hvad der virkelig foregår.
Hvis du vil sikre dig, at alle klientforbindelser er ssl, kan du altid tvinge dem til
.