Jag använder inte postgres så förhoppningsvis stämmer detta för dig.
SQLAlchemy tar informationen som du anger i webbadressen och skickar den till det underliggande dbapi-biblioteket som också anges i webbadressen, i ditt fall är det psycopg2.
Din motor
instans ansluter bara till databasen när det behövs, och sqlalchemy skickar bara anslutningsinformationen vidare till drivrutinen som anges i URL:en som returnerar en anslutning som sqlalchemy använder.
Ursäkta att detta är mysql, men borde vara i grunden samma för 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>
Anropar engine.connect()
returnerar en sqlalchemy.engine.base.Connection
instans som har en L__71_codein. ()
anslutningsfenans metod, och som du kan se har den en anslutning
attribut som är den faktiska underliggande dbapi-anslutningen.
def __init__(self, dbapi_connection, connection_record, echo):
self.connection = dbapi_connection
self._connection_record = connection_record
self._echo = echo
När det gäller vilken information som är tillgänglig på dbapi-anslutningsobjektet, beror det på implementeringen av just den drivrutinen. Psycopg2-anslutningsobjekt har till exempel en info
attribut:
Den informationen
objektet har attribut som ssl_in_use
:
Och ssl_attribute
:
Så du behöver inte gräva för djupt för att komma till själva db-anslutningen för att se vad som verkligen pågår.
Om du också vill säkerställa att alla klientanslutningar är ssl kan du alltid tvinga dem till
.