Tôi không sử dụng postgres nên hy vọng điều này đúng với bạn.
SQLAlchemy lấy thông tin mà bạn cung cấp trong url và chuyển nó xuống thư viện dbapi bên dưới cũng được chỉ định trong url, trong trường hợp của bạn là psycopg2.
engine
của bạn instance chỉ kết nối với cơ sở dữ liệu khi cần thiết và sqlalchemy chỉ chuyển thông tin kết nối cùng với trình điều khiển được chỉ định trong url trả về kết nối mà sqlalchemy sử dụng.
Xin thứ lỗi rằng đây là mysql, nhưng về cơ bản phải giống với bạn:
>>> 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>
Đang gọi engine.connect()
trả về sqlalchemy.engine.base.Connection
ví dụ có connection property
mà docstring cho biết:
Tuy nhiên, bạn có thể thấy từ phía trên rằng nó thực sự trả về một sqlalchemy.pool._ConnectionFairy
đối tượng mà từ đó là docstring:
Đây là __init__()
phương thức của tiên kết nối và như bạn có thể thấy nó có connection
thuộc tính là kết nối dbapi cơ bản thực tế.
def __init__(self, dbapi_connection, connection_record, echo):
self.connection = dbapi_connection
self._connection_record = connection_record
self._echo = echo
Đối với thông tin nào có sẵn trên đối tượng kết nối dbapi, nó phụ thuộc vào việc triển khai trình điều khiển cụ thể đó. Ví dụ:các đối tượng kết nối psycopg2 có info
thuộc tính:
info
đó đối tượng có các thuộc tính như ssl_in_use
:
Và ssl_attribute
:
Vì vậy, bạn không cần phải đào quá sâu để có được kết nối db thực tế để xem điều gì đang thực sự diễn ra.
Ngoài ra, nếu bạn muốn đảm bảo rằng tất cả các kết nối máy khách đều là ssl, bạn luôn có thể force them to
.