2013-04-01 91 views
0

我在Python中使用psycopg2。刪除表中的所有數據,但最後N個條目

我想定期從我的數據庫刷新數據。我爲此設置了Timer任務。之前我詢問過this question,但使用列出的答案凍結了我的機器(鍵盤停止響應,整個系統停止響應)。相反,我想刪除表中的所有條目,儘管是最後一個N(不確定這是否是正確的方法)。

基本上,有另一個正在運行的python進程(單獨的可執行文件),它正在填充我希望查詢的db。看來,如果我刪除所有條目,並且其他進程正在運行,它可能導致凍結。我不知道我可以刪除條目的安全方式;就好像其他進程在寫入數據庫時​​依賴於遞增ID。

如果任何人都可以幫助我解決這個問題,將不勝感激。思考?

回答

2

一個可能的解決方案是對所有id運行DELETE,除了由select ... order by pk desc limit N返回的給定自動增量pk。如果不存在這樣的pk,則有一個created_date並按它排序應該是相同的。

非測試例如:

import psycopg2 
connection = psycopg2.connect('dbname=test user=postgres') 
cursor = conn.cursor() 

query = 'delete from my_table where id not in (
      select id from my_table order by id desc limit 30)' 
cursor.execute(query) 
cursor.commit() #Don't know if necessary 
cursor.close() 
connection.close() 
+0

感謝。你能舉個例子嗎? – jml

+0

@jml添加了一個示例。 – Mariano

+0

你會多久打一次cursor.close()? – jml

相關問題