我每分钟都有一个来自数据库(MySQL)的程序查询数据。
while 1:
self.alerteng.updateAndAnalyze()
time.sleep(60)
但数据不会经常变化;也许一个小时或一天。(由另一个C ++程序改变)
我认为最好的方法是跟踪更改,如果发生更改,那么我会查询并更新我的数据。
任何建议?
答案 0 :(得分:2)
这取决于你正在做什么,但SQLAlchemy的事件功能可能会帮助你。
它允许您在数据库中发生某些事情时运行代码,即在插入新行或设置列值之后。我在Flask应用程序中使用它来启动通知或其他异步过程。
http://docs.sqlalchemy.org/en/rel_0_7/orm/events.html#mapper-events
这是来自Flask应用程序的玩具代码,只要在数据库中创建新的YourModel模型,它就会运行kick_off_analysis()函数。
from sqlalchemy import event
@event.listens_for(YourModel, "after_insert")
def kick_off_analysis(mapper, connection, your_model):
# do stuff here
希望能帮助您入门。
答案 1 :(得分:0)
我不知道updateAndAnalyze()
有多贵,但我很确定它就像大多数SQL命令一样:不是你真正想要推荐的东西。
您有Observer Pattern的教科书案例。你希望MySQL在你的代码更新时以某种方式调用某些东西。我不是肯定完全机制来做到这一点,但应该有办法在相关的表上设置一个触发器,它可以通知你的代码基础表已经更新。然后,您基本上会因为知道您需要做某些事情而被“打断”,而不是轮询。它还将消除您引入的最新延迟,这将使您正在做的任何事情都变得更加活泼。