2012-08-31 27 views
5

Cách tốt nhất để nhận được số lượng kết quả truy vấn khi sử dụng NDB trên công cụ ứng dụng của Google là gì?Nhận thời lượng truy vấn NDB - sử dụng Python trên Google App Engine

Đã cố gắng này:

query = NDB_Model.query(NDB_Model.some_property == some_value) 
if len(query) > 0: # <-- this throws and exception 
    entity = query[0] 

Tôi xin lỗi rằng đây có lẽ là một câu hỏi rất đơn giản, nhưng nó không phải là rõ ràng với tôi từ docs.

Trả lời

11

Dường như bạn chỉ muốn nhận thực thể đầu tiên từ truy vấn của mình. Đó là những gì query.get() là dành cho.

query = NDB_Model.query(NDB_Model.some_property == some_value) 

entity = query.get() 
if entity is not None: 
    # Do stuff 

Từ các tài liệu:

Trả về kết quả truy vấn đầu tiên, nếu có (nếu không None). Điều này tương tự như gọi q.fetch (1) và trả về mục đầu tiên của danh sách kết quả.

Ở dạng tổng quát hơn, có query.fetch(n) trong đó n là số thực thể tối đa cần tìm nạp. Nó trả về một danh sách, vì vậy bạn có thể dễ dàng kiểm tra len() trên đó.

+0

Cảm ơn rất nhiều vì đã trả lời của bạn, tôi cảm thấy ngu ngốc khi tôi tìm thấy một phần về việc sử dụng "lấy()" trong các tài liệu ngay sau khi tôi đăng câu hỏi này. Nhưng tôi vẫn vui vì tôi đã hỏi vì có thể đã làm "query.fetch (1) [0]" thay vì tốt hơn nhiều "query.get()" –

+1

@ChrisDutrow: Không sao cả! Khi bạn sử dụng 'q.fetch (n)', hãy chắc chắn kiểm tra độ dài, vì fetch trả về _up to_ 'n' các thực thể, nhưng nó _can_ trả về ít hơn. 'N' chỉ là giới hạn. – voithos

+0

@voithos ** Cách tốt nhất để nhận được số kết quả truy vấn (chỉ là số đếm) khi sử dụng NDB? **. –

3

Để lấy số liệu kết quả của một truy vấn NDB bạn chỉ có thể sử dụng count():

query = NDB_Model.query(NDB_Model.some_property == some_value) 
if query.count() > 0: 
    entity = query[0] 
Các vấn đề liên quan