使用关键字参数在 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
我在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