谷歌应用引擎ndb连续查询

时间:2014-05-06 08:01:08

标签: python google-app-engine webapp2

假设我有一个HTML表单,如下所示:

<form ...>
    Title: <input type=text name=title>
    Account: <input type=text name=account>
    <input type=submit value=search>
</form>

Google App引擎的NDB如下:

class Message(ndb.Model):
    title = ndb.StringProperty()
    account = ndb.StringProperty()

由于用户可能会或可能不会在字段中输入数据,因此搜索将实现为连续查询:

messages = Message.query()
if title:
    messages = messages.query(Message.title==title)
if account:
    messages = messages.query(Message.account==account)

上面的代码不起作用,因为“查询对象没有属性查询”

那么,我该如何执行连续查询?

2 个答案:

答案 0 :(得分:1)

您是否阅读过ndb查询的文档? https://developers.google.com/appengine/docs/python/ndb/queries

它有一个很好的例子,可以在多个部分构建查询

qry1 = Account.query() # Retrieve all Account entitites
qry2 = qry1.filter(Account.userid >= 40) # Filter on userid >= 40
qry3 = qry2.filter(Account.userid < 50) # Filter on userid < 50 as well

在你的例子中,你会

messages = Message.query()
if title:
    messages = messages.filter(Message.title==title)
if account:
    messages = messages.filter(Message.account==account)

在问题中的代码中调用query()会创建一个新查询,而不是扩展它。

在文档中进一步阅读,您可以看到您也可以开始使用OR运算符在多个阶段构建查询。上面的例子意味着AND。

答案 1 :(得分:0)

摆脱messages = Message.query()行,然后使用:

messages = Message.query(Message.title==title)