使用keywords参数在GAE ndb中查询

时间:2015-09-23 16:55:48

标签: python google-app-engine google-cloud-platform google-cloud-datastore app-engine-ndb

当我想在GAE上查询ndb时遇到了一些问题。

是否可以使用关键字参数查询数据库?

从文档中可以看出查询字符串应该是表达式。

Calendar

我可以通过

之类的关键字参数进行查询或过滤
qry = Account.query(username == 'test_user')

如果没有,我如何将关键字参数传递到符合ndb条件的表达式中。

谢谢。

2 个答案:

答案 0 :(得分:2)

这样的事情会让你的kwargs成为查询的过滤器:

def search_userinfo(**kwargs):
  qry = UserInfo.query(*(getattr(UserInfo, k)==v for (k,v) in kwargs.items()))
  return qry

答案 1 :(得分:0)

首先,查询应该在属性名称之前具有类名:

qry = Account.query(Account.username == 'test_user')

接下来,当==使用**kwargs运算符时,查询使用=运算符,因此您必须自己编写查询:

def search_userinfo(self, **kwargs):
    return UserInfo.query(UserInfo.username == kwargs['username'])

如果要查询属性列表,可以将它们链接在一起:

def search_userinfo(self, **kwargs):
    qry = UserInfo.query()
    if 'username' in kwargs:
        qry = qry.filter(UserInfo.username == kwargs['username'])
    if 'other' in kwargs:
        qry = qry.filter(UserInfo.other == kwargs['other'])
    ...
    return qry

有关详细信息,请参阅NDB Query Class