2010-07-21 15 views
5

Tôi có một người dùng trong hệ thống của mình đã tạo ra một thực thể mà tôi muốn truy xuất. Tôi đang cố gắng thực hiện việc này bằng cách sử dụng số filter vì nó được cho là nhanh hơn cuộc gọi đến số gql method. Tuy nhiên, bộ lọc không trả về kết quả nào và gql hoạt động.Bộ lọc của Máy ứng dụng so với các phương pháp gql

randy_res = Vote.all().filter('created_by=', randy).fetch(limit=10) 
randy_res = Vote.gql('WHERE created_by=:1', randy) 

Có bất kỳ lý do tại sao lọc sẽ trả về một danh sách trống và GQL cuộc gọi sẽ trả lại kết quả đúng?

+3

Là một sang một bên, sự khác biệt tốc độ giữa việc sử dụng GQL và các bộ lọc để xây dựng các truy vấn nên cực kỳ tầm thường so với chi phí thực sự của truy vấn. Nếu gql dễ đọc hơn hoặc trực quan hơn cho bạn, hãy gắn bó với nó. –

+3

Nhiều như tôi không thích GQL, @Drew là đúng: Bất kỳ sự khác biệt hiệu suất là tầm thường. –

Trả lời

12

Khi sử dụng filter(), bạn đang yêu cầu để có khoảng trắng giữa tên trường và toán tử. Để có được cuộc gọi filter() bạn để làm việc như dự định, bạn chỉ cần chèn một dấu cách trước dấu bằng:

randy_res = Vote.all().filter('created_by =', randy).fetch(limit=10) 
+1

ahhhhhh! điều này làm tôi phát điên trong một đêm. Im lặng thất bại là cơn ác mộng tồi tệ nhất của tôi. Tôi đã gửi một vấn đề 2 năm trước, nhưng nó không giống như bất cứ ai khác quan tâm (chỉ 6 sao). http://code.google.com/p/googleappengine/issues/detail?id=688 –

+0

Wow. Bạn là một người tiết kiệm cuộc sống! –

+1

@Peter Thật không may, nó không phải là một lỗi: Mã gốc là một truy vấn hoàn toàn hợp lệ cho thuộc tính với tên 'created_by =', và bất kỳ thay đổi nào sẽ phá vỡ hành vi này (được thừa nhận là không phổ biến). –

Các vấn đề liên quan