gpt4 book ai didi

google-app-engine - 如何创建匹配键的查询?

转载 作者:太空宇宙 更新时间:2023-11-03 15:21:45 25 4
gpt4 key购买 nike

我使用另一个用户(赞助商)的 key 来指示谁是用户的赞助商,它会在数据存储中为那些拥有赞助商的用户创建一个链接,它最多可以是一个,但赞助商可以赞助许多用户喜欢在这种情况下赞助其他三个用户的 ID 2002:

enter image description here

在这种情况下,此查询执行我想要的操作:SELECT * FROM User where sponsor =KEY('agtzfmJuYW5vLXd3d3ILCxIEVXNlchjSDww') 但我不知道如何使用 python 进行编程,我只能使用它到数据存储区。当我想匹配同一字段中具有相同用户作为键的用户集时,如何按键查询?我的模型中的用户最多可以有一个赞助商,我只想知道一个特定的人赞助了谁,这可能是一个用户列表,然后他们又赞助了我也想查询的用户。

现场赞助商是一个关键,它有一个链接到数据存储中的赞助商。我设置的 key 就像 user2.sponsor = user1.key 现在我想找到所有 user1 赞助的查询应该就像

User.All().filter('sponsor = ', user1.key)

但是赞助商是一个键类型的字段,所以我不知道如何匹配它以查看例如活跃用户赞助的人的列表以及当第二代也有链接时它如何变成一棵树。如何选择该用户赞助的用户列表,然后选择第二代?当我简单地像 u1=u2.key 一样建模关系时,即 user2.sponsor=user1.key。感谢您的任何提示

以下解决方法是不好的做法,但这是我最后也是唯一的办法:

def get(self):
auser = self.auth.get_user_by_session()
realuser = auth_models.User.get_by_id(long( auser['user_id'] ))
q = auth_models.User.query()
people = []
for p in q:
try:
if p.sponsor == realuser.key:
people.append(p)
except Exception, e:
pass
if auser:
self.render_jinja('my_organization.html', people=people, user=realuser,)

更新

问题是 keyproperty 不是必需的,Guido Van Rossum 已将其报告为 ndb 中的错误,而我认为这是我的代码中的错误。这是我现在正在使用的,这是一个非常可接受的解决方案,因为除了可能的程序员、测试人员和管理员之外,组织中的每个真实用户都将被要求拥有一个发起人 ID,这是一个用户 ID。

from ndb import query
class Myorg(NewBaseHandler):
@user_required
def get(self):
user = auth_models.User.get_by_id(long(self.auth.get_user_by_session()['user_id']))
people = auth_models.User.query(auth_models.User.sponsor == user.key).fetch()
self.render_jinja('my_organization.html', people=people,
user=user)

class User(model.Expando):
"""Stores user authentication credentials or authorization ids."""

#: The model used to ensure uniqueness.
unique_model = Unique
#: The model used to store tokens.
token_model = UserToken
sponsor = KeyProperty()
created = model.DateTimeProperty(auto_now_add=True)
updated = model.DateTimeProperty(auto_now=True)
# ID for third party authentication, e.g. 'google:username'. UNIQUE.
auth_ids = model.StringProperty(repeated=True)
# Hashed password. Not required because third party authentication
# doesn't use password.
password = model.StringProperty()
...

最佳答案

User 模型是一个 NDB Expando,查询起来有点棘手。

来自docs

Another useful trick is querying an Expando kind for a dynamic property. You won't be able to use class.query(class.propname == value) as the class doesn't have a property object. Instead, you can use the ndb.query.FilterNode class to construct a filter expression, as follows:

from ndb import model, query

class X(model.Expando):
@classmethod
def query_for(cls, name, value):
return cls.query(query.FilterNode(name, '=', value))

print X.query_for('blah', 42).fetch()

所以尝试:

form ndb import query

def get(self):
auser = self.auth.get_user_by_session()
realuser = auth_models.User.get_by_id(long( auser['user_id'] ))
people = auth_models.User.query(query.FilterNode('sponsor', '=', realuser.key)).fetch()
if auser:
self.render_jinja('my_organization.html', people=people, user=realuser,)

关于google-app-engine - 如何创建匹配键的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8766150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com