Не използвам postgres, така че се надявам това да важи и за вас.
SQLAlchemy взема информацията, която предоставяте в URL адреса, и я предава на основната dbapi библиотека, която също е посочена в URL адреса, във вашия случай това е psycopg2.
Вашият engine
екземплярът се свързва с базата данни само когато е необходимо, а sqlalchemy просто предава информацията за връзката към драйвера, посочен в url, който връща връзка, използвана от sqlalchemy.
Извинете, че това е mysql, но трябва да е по същество същото за вас:
>>> 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>
Извикване на engine.connect()
връща sqlalchemy.engine.base.Connection
екземпляр, който има connection property
за което документационният низ казва:
Въпреки това можете да видите отгоре, че всъщност връща sqlalchemy.pool._ConnectionFairy
обект, който от неговия docstring:
Ето __init__()
метод на феята на връзката и както виждате има connection
атрибут, който е действителната основна dbapi връзка.
def __init__(self, dbapi_connection, connection_record, echo):
self.connection = dbapi_connection
self._connection_record = connection_record
self._echo = echo
Що се отнася до това каква информация е налична за обекта за свързване на dbapi, зависи от внедряването на този конкретен драйвер. Например обектите за връзка psycopg2 имат info
атрибут:
Тази info
обектът има атрибути като ssl_in_use
:
И ssl_attribute
:
Така че не е нужно да копаете твърде дълбоко, за да стигнете до действителната db връзка, за да видите какво наистина се случва.
Освен това, ако искате да сте сигурни, че всички клиентски връзки са ssl, винаги можете да force them to
.