Tôi có một đối tượng truy vấn SQLAlchemy và muốn lấy văn bản của câu lệnh SQL đã biên dịch, với tất cả các tham số của nó bị ràng buộc (ví dụ: không %s
hoặc các biến khác đang chờ bị ràng buộc bởi trình biên dịch câu lệnh hoặc công cụ phương ngữ MySQLdb, v.v.).
Gọi str()
trên truy vấn cho thấy một cái gì đó như thế này:
SELECT id WHERE date_added <= %s AND date_added >= %s ORDER BY count DESC
Tôi đã thử tìm kiếm trong query._params nhưng đó là một câu lệnh trống. Tôi đã viết trình biên dịch của riêng mình bằng cách sử dụng ví dụ này về trình sqlalchemy.ext.compiler.compiles
trang trí nhưng ngay cả câu lệnh ở đó vẫn có%s
nơi tôi muốn dữ liệu.
Tôi hoàn toàn không thể tìm ra khi nào các tham số của tôi được trộn vào để tạo truy vấn; khi kiểm tra đối tượng truy vấn, chúng luôn là một từ điển trống (mặc dù truy vấn thực thi tốt và công cụ in ra khi bạn bật ghi nhật ký tiếng vọng).
Tôi bắt đầu nhận được thông báo rằng SQLAlchemy không muốn tôi biết truy vấn cơ bản, vì nó phá vỡ bản chất chung của giao diện API biểu thức tất cả các DB-API khác nhau. Tôi không phiền nếu truy vấn được thực thi trước khi tôi tìm ra nó là gì; Tôi chỉ muốn biết!