PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

SQLAlchemy vérifie la connexion SSL

Je n'utilise pas postgres donc j'espère que cela est vrai pour vous.

SQLAlchemy prend les informations que vous fournissez dans l'url et les transmet à la bibliothèque dbapi sous-jacente qui est également spécifiée dans l'url, dans votre cas c'est psycopg2.

Votre engine l'instance ne se connecte à la base de données que lorsque cela est nécessaire, et sqlalchemy transmet simplement les informations de connexion au pilote spécifié dans l'url qui renvoie une connexion utilisée par sqlalchemy.

Pardonnez qu'il s'agisse de mysql, mais cela devrait être fondamentalement le même pour vous :

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

Appel de engine.connect() renvoie un sqlalchemy.engine.base.Connection instance qui a une connection property pour lequel la docstring indique :

Cependant, vous pouvez voir ci-dessus qu'il renvoie en fait un sqlalchemy.pool._ConnectionFairy objet qui à partir de sa docstring :

Voici le __init__() méthode de la fée de connexion, et comme vous pouvez le voir, elle a une connection attribut qui est la connexion dbapi sous-jacente réelle.

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

Quant aux informations disponibles sur l'objet de connexion dbapi, cela dépend de l'implémentation de ce pilote particulier. Par exemple, les objets de connexion psycopg2 ont une info attribut :

Cette info l'objet a des attributs tels que ssl_in_use :

Et ssl_attribute :

Vous n'avez donc pas besoin de creuser trop profondément pour accéder à la connexion réelle à la base de données et voir ce qui se passe réellement.

De plus, si vous voulez vous assurer que toutes les connexions client sont SSL, vous pouvez toujours force them to .