2012-11-11 38 views
0

我每分鐘都有一個程序從數據庫(MySQL)中查詢數據。同步數據,想跟蹤發生了什麼變化

while 1: 
    self.alerteng.updateAndAnalyze() 
    time.sleep(60) 

但數據不會頻繁變化;也許一個小時或一天一次(更換另一個C++程序)

我認爲最好的方法是跟蹤變化,如果發生變化,然後我查詢和更新我的數據。

有什麼建議嗎?

回答

2

這取決於你在做什麼,但SQLAlchemy的事件功能可能會幫助你。

它允許您在數據庫中發生任何事情時(即插入新行或設置列值後)運行代碼。我用它在Flask應用程序中啓動通知或其他異步過程。

http://docs.sqlalchemy.org/en/rel_0_7/orm/events.html#mapper-events

下面是從一個瓶的應用程序,只要在數據庫中創建一個新的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 

希望能幫助您開始。

0

我不知道updateAndAnalyze()是多麼昂貴,但我非常肯定它就像大多數SQL命令:不是你真正想要輪詢的東西。

你有一本Observer Pattern的教科書。您希望MySQL在代碼更新時以某種方式調用某些代碼。我不確定確切的機制可以做到這一點,但是應該有辦法在你的相關表上設置一個觸發器,它可以通知你的代碼底層表已經被更新。然後,您不必進行投票,而是基本知道您需要做些事情而「中斷」。它也將消除你引入的最新一分鐘的延遲,這將使你所做的任何事情都更加活潑。

相關問題