【问题标题】:Why is this datastore querying by key returning None?为什么这个数据存储区按键查询返回无?
【发布时间】:2012-07-09 13:30:30
【问题描述】:

1) 当我执行这个查询时:

contract_record = Contract(book_number = 42, initial_page = 420, final_page = 442)
contract_record.put()
contract_key = contract_record.key()
contract = db.GqlQuery("SELECT * FROM Contract WHERE __key__ = KEY('Contract', '$[contract_key]')").get()

结果为无。为什么?

2) 如何不通过键,而是通过 key_id 进行此查询? (像这样:

contract_id = contract_record.key().id()
contract = db.GqlQuery("SELECT * FROM Contract WHERE __key__ = KEY('Contract', '$[contract_id]')").get()

感谢您的帮助!

【问题讨论】:

    标签: python google-app-engine datastore gql


    【解决方案1】:

    '$[contract_key]' 应该是什么?你想在这里做某种字符串替换吗?这真的不是它的工作原理。也许您的意思是使用%s 运算符?

    无论如何,我真的不明白您为什么坚持通过 GQL 进行查询。通过key获取对象的方法是直接用get

    contract = db.get(contract_key)
    

    对于密钥 ID:

    contract = Contract.get_by_id(id)
    

    【讨论】:

    • 谢谢,@Daniel,我想直到现在我才完全理解您之前的建议(关于如何通过密钥获取数据存储对象)。真的谢谢!
    【解决方案2】:

    也许这不是您正在寻找的答案,但您可以试试这个:

    contract_record = Contract(book_number = 42, initial_page = 420, final_page = 442)
    contract_record.put()
    contract_key = contract_record.key()
    contract = db.get(contract_key)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多