PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

SQLAlchemy überprüft die SSL-Verbindung

Ich verwende Postgres nicht, also hoffe ich, dass dies auch für Sie gilt.

SQLAlchemy nimmt die Informationen, die Sie in der URL angeben, und leitet sie an die zugrunde liegende dbapi-Bibliothek weiter, die ebenfalls in der URL angegeben ist, in Ihrem Fall ist es psycopg2.

Ihre engine Die Instanz verbindet sich nur bei Bedarf mit der Datenbank, und sqlalchemy leitet die Verbindungsinformationen einfach an den in der URL angegebenen Treiber weiter, der eine Verbindung zurückgibt, die sqlalchemy verwendet.

Verzeihen Sie, dass dies mysql ist, aber im Grunde dasselbe für Sie sein sollte:

>>> 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>

Aufruf von engine.connect() gibt eine sqlalchemy.engine.base.Connection zurück Instanz, die eine connection property wofür der docstring sagt:

Sie können jedoch von oben sehen, dass es tatsächlich eine sqlalchemy.pool._ConnectionFairy zurückgibt Objekt, dessen Docstring:

Hier ist der __init__() Methode der Verbindungsfee, und wie Sie sehen können, hat sie eine connection -Attribut, das die tatsächlich zugrunde liegende dbapi-Verbindung ist.

def __init__(self, dbapi_connection, connection_record, echo):
    self.connection = dbapi_connection
    self._connection_record = connection_record
    self._echo = echo

Welche Informationen über das dbapi-Verbindungsobjekt verfügbar sind, hängt von der Implementierung dieses bestimmten Treibers ab. Beispielsweise haben psycopg2-Verbindungsobjekte eine info Attribut:

Diese info Objekt hat Attribute wie ssl_in_use :

Und ssl_attribute :

Sie müssen also nicht zu tief graben, um an die eigentliche DB-Verbindung zu gelangen, um zu sehen, was wirklich vor sich geht.

Wenn Sie außerdem sicherstellen möchten, dass alle Clientverbindungen SSL sind, können Sie jederzeit force them to .