PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

SQLAlchemy verificar conexão SSL


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 .