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
.