使用关键字参数在 GAE ndb 中查询

Using keywords argument to query in GAE ndb

我在GAE上查询ndb遇到了一些问题

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

从文档来看,查询字符串应该是表达式。

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

我可以通过关键字参数查询或过滤吗

search_userinfo(username='test_user')

def search_userinfo(self, **kwargs):
    return UserInfo.query(**kwargs)

如果不是,我如何将关键字参数转换为匹配 ndb 条件的表达式。

谢谢。

首先,查询应该在 属性 名称之前包含 class 名称:

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

像这样的东西会将你的 kwargs 变成查询的过滤器:

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