【问题标题】:App engine query retrieve data with index reference应用引擎查询使用索引引用检索数据
【发布时间】:2011-05-02 09:27:36
【问题描述】:

class Entry(Base):
    amount = db.IntegerProperty()


entries = Entry.gql("WHERE amount > 0")

有没有办法用索引作为数组引用条目结果,例如

my_entry = entries[4]

【问题讨论】:

    标签: python google-app-engine gql


    【解决方案1】:

    entries = [x for x in Entry.gql("WHERE amount > 0")]

    此答案与先前答案的区别在于它在数据存储区而不是在处理程序中进行过滤,并且不需要您猜测将返回的最大实体数。

    【讨论】:

    • 你可以简单地使用list(Entry.gql("WHERE amount > 0"))
    • 两者都比简单地在查询上调用.fetch(n) 效率低,其中 n 是您想要的最大结果数。
    【解决方案2】:

    您可以在Query 实例上使用fetch() 方法:

    class Entry(Base):
        amount = db.IntegerProperty()
    
    
    entries = Entry.gql("WHERE amount > 0").fetch(5)
    
    print entries[4].amount
    

    【讨论】:

      【解决方案3】:

      你必须做一个 fetch() 。这会给你一个条目列表。在这种情况下, my_entry=entries[4] 会给你第五个对象。你试图做的是操纵 gql 对象。这显然是行不通的。试试这个

      class Entry(Base):
          amount = db.IntegerProperty()
      
      
      entries = Entry.gql("WHERE amount > 0").fetch(1000)
      
      print entries[4].amount
      

      【讨论】:

        【解决方案4】:

        如果要在结果查询中引用特定索引的一个对象,可以使用db.Queryfetch 方法和offset 参数:

        entry = Entry.gql("WHERE amount > 0").fetch(1, offset=4)[0]
        print entry.amount
        

        但是,如果您想从查询结果中引用多个对象,fetch 它们全部并索引为普通 Python 数组:

        entries = Entry.gql("WHERE amount > 0").fetch(1000)
        print entries[4].amount
        print entries[5].amount
        print entries[7].amount
        # etc.
        

        【讨论】:

          【解决方案5】:
          entries= [entry for entry from Entry.all() if entry.amount > 0]
          print entries[4]
          

          【讨论】:

          • 这将返回数据存储中的所有记录并且不会扩展。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-23
          • 1970-01-01
          • 1970-01-01
          • 2011-07-05
          • 1970-01-01
          • 2013-05-25
          相关资源
          最近更新 更多