列到达特定值后立即删除该行

时间:2016-10-14 05:21:29

标签: python postgresql concurrency sqlalchemy locking

如果这是我的模特:

class Entity(Base):
    id = Column(Integer, primary_key=True)
    count = Column(Integer, default=0)

我想删除任何达到count值3(或任何数字)的行。 我怎样才能做到这一点? 我应该在我的Web应用程序的Controller中实现这样的删除,并且每次count递增时,我检查它的值是否为3?我应该如何关心正在改变值的并发请求?什么是最好的解决方案?

2 个答案:

答案 0 :(得分:1)

在经过一段时间思考和咨询专家之后,我发现解决这个问题的方法是在数据库中实现锁定或使用redis。由于锁定可能会导致多个请求中出现性能问题,因此最好将count的值存储在redis数据库中,并尝试在特定时间段内更新对象关系数据库中的count值。

答案 1 :(得分:-2)

  

我应该在我的网络应用程序的控制器中实现删除吗?

是。您应该在控制器中实现它。只需确保您有一个能够访问控制器中delete功能的视图。

  

我该怎么做?

简单。在控制器中,创建一个将处理删除的函数。删除函数体应如下所示:

limit = 3 # The value of this variable is arbitrary.
Entity.query.filter(Entity.count == limit).delete()
# The two statements above can be simplified to
# Entity.query.filter(Entity.count == 3).delete()

db.session.commit()

更好的是,添加一个函数参数,该参数将接受一个值,该值将是行中列的最大值。它看起来像这样:

def delete_entity(limit=3): # I set `limit` to 3 since that is what you have stated earlier in the question
    Entity.query.filter(Entity.count == limit).delete()
    db.session.commit()
  

每次计数递增时,我检查值是否为3?什么是最好的解决方案?

这取决于您希望应用程序执行的操作。