Eu não uso postgres, então espero que isso seja verdade para você.
SQLAlchemy pega as informações que você fornece na url e as passa para a biblioteca dbapi subjacente que também é especificada na url, no seu caso é psycopg2.
Seu
engine
A instância só se conecta ao banco de dados quando necessário, e o sqlalchemy apenas passa as informações de conexão para o driver especificado na url que retorna uma conexão que o sqlalchemy usa. Perdoe que este é o mysql, mas deve ser fundamentalmente o mesmo para você:
>>> 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>
Chamando
engine.connect()
retorna um sqlalchemy.engine.base.Connection
instância que tem uma propriedade de conexão connection property
para o qual a docstring diz:No entanto, você pode ver acima que ele realmente retorna um
sqlalchemy.pool._ConnectionFairy
objeto que de sua docstring:Aqui está o
__init__()
método da fada de conexão, e como você pode ver tem uma connection
atributo que é a conexão dbapi subjacente real. def __init__(self, dbapi_connection, connection_record, echo):
self.connection = dbapi_connection
self._connection_record = connection_record
self._echo = echo
Quanto às informações disponíveis no objeto de conexão dbapi, isso depende da implementação desse driver específico. Por exemplo, objetos de conexão psycopg2 têm uma
info
atributo:Essa
info
objeto tem atributos como ssl_in_use
:E
ssl_attribute
:Portanto, você não precisa cavar muito fundo para obter a conexão db real para ver o que realmente está acontecendo.
Além disso, se você quiser garantir que todas as conexões do cliente sejam SSL, você sempre pode
force them to
.