【问题标题】:Google app engine- how to delete single entity wen u have ID for that entity in python谷歌应用引擎-如何删除单个实体,如果你在 python 中有该实体的 ID
【发布时间】:2014-09-19 12:03:43
【问题描述】:

我正在使用 GAE 构建博客。我想用 ID 键删除存储在数据存储中的特定帖子。我的代码是..

#my db model
class Post(db.Model):
subject = db.StringProperty(required = True)
content = db.TextProperty(required = True)
created = db.DateTimeProperty(auto_now_add = True)
lastmodified = db.DateTimeProperty(auto_now = True)

#my delete post handler
class DeletePost(Bloghandler):
    def post(self):
        key = self.request.get('id')

#my html form which passes the ID of the entity.
<form method="post" class="button-link" action="http://localhost:8080/blog/delete">
<input type="hidden" name="id" value={{p.Key().id()}}>
<input type="submit" name="delete" value="Delete">
</form><br><br>

有一篇类似的帖子删除了涉及 blobstore 的实体,这让我很难理解和实施。任何帮助将不胜感激!:)

【问题讨论】:

    标签: python-2.7 google-cloud-datastore gql


    【解决方案1】:

    db.delete(key)

    除此之外,我真的不明白你的问题。如果您有密钥,则只需使用所述密钥调用 db.delete

    你还需要什么(如果我不清楚你在问什么)?

    【讨论】:

    • 我试过这样做,它正常工作。我有该行的 id 而不是密钥。我如何从这一点继续删除该特定行??
    • 从id,你不能做类似“MyModel.get_by_id([your id])”的事情来获取你的实体,然后做key = entity.key()来获取密钥(如果您使用 ndb 而不是 db,则没有括号)。 docs.google.com/document/d/…(查看 db V ndb 及其方法的非常有用的网页)
    【解决方案2】:

    实际上无需从 Datastore 中获取实体即可将其删除。由于您有密钥的 id,您可以使用 Key.from_path 手动构建它

    class DeletePost(Bloghandler):
      def post(self):
        key_id = self.request.get('id')
        db.delete(db.Key.from_path('Post', key_id))
    

    请注意,如果您将父级添加到您的密钥,则此解决方案和其他建议的解决方案将不会,这在您开始考虑您的一致性模型时可能很重要。

    相反,您应该使用密钥的序列化版本:

    class DeletePost(Bloghandler):
        def post(self):
            key = db.Key(encoded=self.request.get('id'))
            db.delete(key)
    
    <form method="post" class="button-link" action="http://localhost:8080/blog/delete">
    <input type="hidden" name="id" value={{p.key()}}>
    <input type="submit" name="delete" value="Delete">
    </form><br><br>
    

    如here 所述,在db.Key 上使用str() 将返回密钥的urlsafe 字符串编码,然后Key 构造函数可以读取该字符串。

    【讨论】:

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