2012-10-28 32 views
3

我在Python中做了一個循環,它調用自己重複檢查數據庫中的新條目。在第一次執行時,所有受影響的行都顯示正常。同時,我在數據庫中添加更多行。在我的循環中的下一個查詢中,新行不顯示。在SQL INSERT&「commit」後,Python和SQL沒有出現新行

這是我的查詢循環:

def loop(): 
    global mysqlconfig # username, passwd... 
    tbd=[] # this is where I save the result 
    conn = MySQLdb.connect(**mysqlconfig) 
    conn.autocommit(True) 
    c = conn.cursor() 
    c.execute("SELECT id, message FROM tasks WHERE date <= '%s' AND done = 0;" % now.isoformat(' ')) 
    conn.commit() 
    tbd = c.fetchall()  
    print tbd 
    c.close() 
    conn.close() 

    time.sleep(5) 
    loop() 
loop() 

這是我的Python插入腳本的SQL部分:

conn = MySQLdb.connect(**mysqlconfig) 
conn.autocommit(1) 
c = conn.cursor() 
c.execute("INSERT INTO tasks (date, message) VALUES ('{0}', '{1}');".format("2012-10-28 23:50", "test")) 
conn.commit() 
id = c.lastrowid 
c.close() 
conn.close() 

我嘗試SQLite的,我試過甲骨文MySQL的連接器,我試過MySQLdb的在Windows和Linux系統上,都有同樣的問題。我查看了Stackoverflow上的許多線程,這些線程建議打開自動提交或在SQL語句(例如one,two,three)之後使用commit(),我試過並失敗了。

當我使用HeidiSQL將數據添加到數據庫時,它顯示在循環查詢中,但我不知道爲什麼會這樣。在Linux重新啓動我的循環腳本之前,Linux和MySQL插入腳本中插入的行不會顯示。

我不知道這是否是我打開2個連接的事實,每個連接都在自己的腳本中,但是當我完成它們時關閉每個連接和每個光標。

回答

1

該問題可能與您的變量now有關。我沒有看到它正在重置的循環中的任何地方。

我可能會使用mysql NOW()功能:

c.execute("SELECT id, message FROM tasks WHERE date <= NOW() AND done = 0;") 

看起來要插入到數據庫中的時間是在未來的時間點。我不認爲你的問題與你的數據庫連接有關,我認爲這與你正在做的查詢有關。

+0

現在我覺得很蠢。這實際上起作用。非常感謝你! – chrki

+0

很容易將注意力集中在一個問題上,而忽略了明顯的答案。我已經做了比我記得更多的時間了。 –