2012-09-14 9 views
10

Tôi đang xây dựng một giao diện trên Flask sử dụng SQLAlchemy và một phần của nó là một API tìm kiếm. Về cơ bản một loại-trước đầu vào đang kêu gọi các máy chủ với giá trị của nó (ví dụ một email) và sau đó là máy chủ đang thực hiện một truy vấn SQLAlchemy sử dụng .like trong một bộ lọc như dưới đâyCác chuỗi được chuyển đến phương thức .like() của SQLAlchemy như thế nào

q = session.query(User).filter(User.email.like('%'+term+'%')).all() 

Truy vấn này là không thực sự trở về bất cứ điều gì hữu ích và sau vài nhân vật đầu tiên, không có gì cả. Nhưng nếu tôi thực hiện cùng một truy vấn với thuật ngữ hardcoded, như vậy:

q = session.query(User).filter(User.email.like('%mysearchterm%')).all() 

Nó sẽ trả lại kết quả hoàn toàn tốt đẹp, vì vậy có điều gì đó với cách tôi đang đặt hạn vào phương pháp tương tự() nhưng tôi thực sự có thể 't tìm ra vấn đề là gì. Thuật ngữ này đến từ một POST ajax và giá trị có ở phía máy chủ, chỉ .like() không sử dụng nó đúng cách.

"Không có gì hữu ích" có nghĩa là các tập hợp kết quả đầu tiên không có gì liên quan đến cụm từ thực tế được nhập, sau một thời hạn dài hơn 3-4 không có kết quả nào được trả về. DB.

Bất kỳ trợ giúp nào được đánh giá cao.

+1

Bạn có chắc chắn rằng thuật ngữ đó là những gì bạn mong đợi? Nếu bạn tạo chuỗi như '%' + term + '%' trong một biến và in biến, bạn có nhận được những gì bạn mong đợi không? Ngoài ra, "Truy vấn này không thực sự trả về bất kỳ điều gì có ích" nghĩa là gì? Cuối cùng, hãy xem xét [bật ghi nhật ký] (http://docs.sqlalchemy.org/en/rel_0_7/core/engines.html#configuring-logging) và xem những gì SQL được tạo ra thực sự là. –

+0

Trong phương pháp bên trong ứng dụng bình của tôi, tôi đang in thuật ngữ trước khi truy vấn được thực hiện và tôi có thể thấy cụm từ bật lên trong bảng điều khiển của tôi để thuật ngữ này được đặt trong hàm. Tôi chỉ cố gắng in '%' + thuật ngữ '%' và xuất nó% myterm% trong giao diện điều khiển là tốt. Bởi không thực sự hữu ích tôi có nghĩa là bộ đầu tiên của kết quả trở lại không có gì để làm với thuật ngữ này, sau khi abotu 3-4 ký tự trong, không có kết quả được trả lại. – jduren

Trả lời

7

Sự cố đã được giải quyết. Truy vấn này nằm bên trong hàm tạo trình truy vấn lớn hơn áp dụng giới hạn và bù đắp cho truy vấn sau này trong hàm, vì giới hạn và bù đắp cao hơn số lượng kết quả trả về tập kết quả trả về trống.

Có thể làm cho lỗi này trở nên tồi tệ và thiếu ngủ.