【问题标题】:how to limit number of entity. google app engine如何限制实体的数量。谷歌应用引擎
【发布时间】:2014-10-24 07:19:04
【问题描述】:

我只想制作 1 个 DailyPost 实体。但是当我同时发出两个请求时,就有两个 DailyPost 实体。

我该如何限制?

环境:

谷歌应用引擎

运行时:Python27

数据存储:ndb

def get_today():
  return datetime.datetime.combine(datetime.date.today(), datetime.time())

class DailyPost(ndb.Model):
  user = ndb.KeyProperty(kind=User)
  content = ndb.StringProperty()
  created = ndb.DateTimeProperty(auto_now_add=True)

class GetOrCreateHandler(webapp2.RequestHandler):
  def get(self):
    user = session.get_user() # user from session (pseudo code)
    post = DailyPost.query(DailyPost.created >= get_today(), 
                           DailyPost.user==user.key).get()
    if not post:
      # Delay to test. (or time.sleep)
      for i in range(30000):
        print 1
      post = DailyPost(content='some text..', user=user.key)
      post.put()

    self.response.write(post.content)

【问题讨论】:

    标签: python google-app-engine


    【解决方案1】:

    只需使用get_or_insert 方法将每天的唯一值作为键:

    import datetime
    
    class DailyPost(ndb.Model):
      user = ndb.KeyProperty(kind=User)
      content = ndb.StringProperty()
      #created = ndb.DateTimeProperty(auto_now_add=True)
    
    class GetOrCreateHandler(webapp2.RequestHandler):
      def get(self):
        user = self.session.get_user() # user from session (pseudo code)
        _id = '%s.%s' % (user.id, datetime.date.today().strftime('%s'))
        DailyPost.get_or_insert(_id, user=user, content='bla')
        self.response.write(post.content)
    

    【讨论】:

    • 谢谢。但我需要为每个用户发一个帖子。 DailyPost.query(DailyPost.created >= get_today(), DailyPost.user==user.key).get()
    • 只需将用户 ID 放在时间戳之前的键中。请查看更新的答案。
    • 我想我应该将 ndb.transactional 与祖先查询一起使用。无论如何,谢谢。
    • 如果您对此问题有自己的解决方案,请自行回答此问题并接受此答案,因此问题将被关闭。
    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多