Tôi đang thiết kế một API với SQLAlchemy (truy vấn MySQL) và tôi muốn buộc tất cả truy vấn của mình có tham số page_size (LIMIT) và page_number (OFFSET).Áp dụng LIMIT và OFFSET cho tất cả các truy vấn trong SQLAlchemy
Có cách nào để làm việc này với SQLAlchemy không? Có lẽ xây dựng một nhà máy của một số loại để tạo ra một đối tượng truy vấn tùy chỉnh? Hoặc có thể có một cách tốt để làm điều này với một lớp mixin?
tôi đã cố gắng điều hiển nhiên và nó đã không làm việc vì .limit() và .offset() phải được gọi sau khi tất cả các điều kiện lọc đã được áp dụng:
def q(page=0, page_size=None):
q = session.query(...)
if page_size: q = q.limit(page_size)
if page: q = q.offset(page*page_size)
return q
Khi tôi thử sử dụng này, tôi nhận ngoại lệ:
sqlalchemy.exc.InvalidRequestError: Query.filter() being called on a Query which already has LIMIT or OFFSET applied. To modify the row-limited results of a Query, call from_self() first. Otherwise, call filter() before limit() or offset() are applied.
Xin đừng sửa một giải pháp vào câu hỏi của bạn. Thay vào đó, hãy đăng nó dưới dạng câu trả lời riêng biệt bên dưới. – Matt