如何创建匹配键的查询?

2024-04-10

我使用另一个用户(赞助商)的密钥来指示谁是用户的赞助商,它会在数据存储中为那些拥有赞助商的用户创建一个链接,最多可以是一个,但赞助商可以赞助许多用户,例如在本例中,ID 2002 赞助了另外三个用户:

在这种情况下,这个查询做了我想要的:SELECT * FROM User where sponsor =KEY('agtzfmJuYW5vLXd3d3ILCxIEVXNlchjSDww')但我不知道如何用 python 编程,我只能将它用于数据存储。当我想匹配同一字段中与key相同的用户的用户集时,如何通过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,)

Update

问题是 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 https://docs.google.com/document/d/1dsx1hihmMXMJm8wIRu49tJR-KEng80o3wkg4Nlbqn-w/edit?hl=en_US#heading=h.j07awmd5m00o

另一个有用的技巧是查询 Expando 类型的动态 财产。您将无法使用 class.query(class.propname == value),因为该类没有属性对象。相反,您可以 使用ndb.query.FilterNode类构造过滤表达式, 如下:

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()

So try:

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,)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建匹配键的查询? 的相关文章

随机推荐

  • 如何从内联样式中获取百分比高度而不是像素高度?

    所以基本上 我有许多具有内联样式的元素height与百分比 虽然 当我尝试将高度保存为要使用的变量时 它会将其保存为像素 例如 div class wrapper div style height 10 Testing 123 div di
  • 更新到 MacOs Mojave 10.14 后是否有 OpenGL 黑屏和伽玛校正?

    我不小心更新了我的 Mac OpenGL 现在在最新的 MacOS Mojave 中已被弃用 我正在使用 OpenGL GLUT 我知道这很旧 但我只需要一个简单的程序 并在终端上运行 不使用 Xcode 使用在 Sierra 中完美运行的
  • 基于ONVIF wsdl生成Java webservice(自顶向下方法)

    我想为像相机这样的设备生成服务器代码 这些设备有一个标准协议 称为ONVIF https www onvif org它发布了一些流行的 WSDL 文档 所以我必须从 ONFIV 的 WSDL 文档生成一个接口和骨架 当我使用 wsdl2ja
  • Oracle 动态旋转

    我有下表 我需要根据 CCL 列创建列 CCL 列中的值未知 我不知道从哪里开始 任何帮助 将不胜感激 TABLEA ID CCL Flag 1 john x 1 adam x 1 terry 1 rob x 2 john x Query
  • Blackberry Java 中的类之间调用

    当屏幕上 单击 位图时 我试图推送一个新屏幕 为此 我从这篇文章中创建了一个类 黑莓可点击位图字段 https stackoverflow com questions 5722875 blackberry clickable bitmapf
  • 安装 gem 时出错:无法为 cygwin 的堆保留空间,Win32 错误 487

    我正在尝试安装win32 api我的机器上安装了 gem 并且在构建本机扩展时遇到了一些问题 gem install win32 api no ri rdoc Temporarily enhancing PATH to include De
  • 如何为WinForm、C#制作框架?

    我一直在研究改变Windows窗体边框的颜色 发现它是由Windows决定的 好吧 这是有道理的 所以我看到以前问过这个问题的人被告知去这里http customerborderform codeplex com http customer
  • 内存警告后 WKWebView 变为空白

    我正在开发一个 iOS 应用程序 它将在 wkWebView 中显示一些 360 度全景内容 该页面确实会加载 但当它收到内存警告时 它会在 iPad 2 上显示空白视图 相关代码 NSURLRequest req NSURLRequest
  • @selector 和其他类 (Objective-C)

    在对象内部我使用 NSMenu 的addItemWithTitle action keyEquivalent 创建 NSMenuItems 问题是我希望调用另一个对象上的方法作为操作 这action 部分需要一个 selector作为参数
  • pinterest 布局样式的 CSS 代码

    我的挑战是尝试使列表网格视图看起来像 pinterest 类似的布局 我已经用它编写了一些代码 但这还不够 下面的行彼此不匹配 content category grid view li featured position relative
  • Expressjs Passport-Local 无法注销

    我将应用程序 Passport local 复制粘贴到我的应用程序上 有趣的是我可以登录用户 但我不能让他们注销 app get logout function req res req logout res redirect 这并不是什么都
  • SQL Server Express 中的链接服务器

    我正在开发一个应用程序 其中我在 SQL Server Express 中有一个本地数据库 在本地数据库中工作期间 我们需要在另一个 SQL Server 实时服务器上执行查询 并返回一个值 并使用该值在本地服务器中执行查询 对 2 或 3
  • Angular 6:无法绑定到“formGroup”,因为它不是“form”的已知属性?

    我曾在 Angular 2 4 中使用过表单生成器 但现在我在 Angular 6 中使用它 我看到了这个问题 无法绑定到 formGroup 因为它不是 form 的已知属性 https stackoverflow com questio
  • 如何使用 ts 中的变量作为 HTML 文件中的标记名? [复制]

    这个问题在这里已经有答案了 我想知道是否有什么方法可以使用HTML tag name p for e g 这是从变量获得的 以下是我尝试过的代码 应用程序组件 ts import Component OnInit from angular
  • 在 Jupyter Notebook 中的 %matplotlib inline 之后使用 %matplotlib Notebook 不起作用

    我正在使用 Jupyter Notebook 来绘制饼图 In 第一个细胞用我的代码我有一个神奇的命令 matplotlib inline在这个神奇的命令之后 我运行我的代码 一切正常并且我的图形呈现 But in 第二个细胞当我设置 ma
  • Tensorboard 错误:当前数据集没有活动的仪表板

    我正在尝试使用 Tensorboard 但每次使用 Tensorflow 运行任何程序时 当我转到 localhost 6006 查看可视化时都会收到错误 这是我的代码 a tf add 1 2 b tf multiply a 3 with
  • getResponseHeader 不是函数

    我需要从另一个页面获取值 但我通过以下代码收到此错误 我该如何修复它 document ready function name submit click function ajax type POST data form signup se
  • 如何为异步流服务器编写 pytest 夹具?

    我一直在尝试学习 asyncio 但找不到任何创建可用于测试服务器代码的 pytest 夹具的示例 一旦服务器启动 我猜它会阻止其他一切 因此测试永远不会运行 pytest asyncio 是否有办法在单独的线程中运行固定装置或其他东西 还
  • Swift - 调用中的额外参数

    我试图从 DetailViewController 类调用 ViewController 类中声明的函数 尝试调试 调用中的额外参数 错误时会弹出 在 ViewController 类中 func setCity item Cities i
  • 如何创建匹配键的查询?

    我使用另一个用户 赞助商 的密钥来指示谁是用户的赞助商 它会在数据存储中为那些拥有赞助商的用户创建一个链接 最多可以是一个 但赞助商可以赞助许多用户 例如在本例中 ID 2002 赞助了另外三个用户 在这种情况下 这个查询做了我想要的 SE