2014-04-01 55 views
1

我有一張表,技能,儘管我試圖向它添加行,但它目前是空的。我有一個CGI腳本以下Python代碼:爲什麼這個sqlite3插入語句不添加一行?

open('/tmp/skills', 'a').write('Reached 1!\n') 
if get_cgi('nous2dianoia'): 
    open('/tmp/skills', 'a').write('Reached 2!\n') 
    #if (get_cgi('previous') and get_cgi('name') and get_cgi('previous') != 
     #get_cgi('name')): 
     #cursor.execute('DELETE FROM skills WHERE name = ?;', 
      #(get_cgi('previous'),)) 
    cursor.execute('''INSERT INTO skills (name, nous2dianoia, 
     hereandnow2escapist, nf2nt, social2individual, ithou2iit, 
     slow2quick) VALUES (?, ?, ?, ?, ?, ?, ?);''', 
     (get_cgi('name'), get_cgi('nous2dianoia'), 
     get_cgi('hereandnow2escapist'), get_cgi('nf2nt'), 
     get_cgi('social2individual'), get_cgi('ithou2iit'), 
     get_cgi('slow2quick'),)) 
    open('/tmp/skills', 'a').write('Reached 3!\n') 

當我打開一個頁面,/ tmp目錄/技能有一個新追加:

Reached 1! 
Reached 2! 
Reached 3! 

然而,該表爲空。 (腳本的其餘部分運行時不會崩潰,並顯示如果在沒有任何CGI變量傳遞的情況下調用腳本時顯示的內容。)

我還沒有開始事務; SQL操作不是特別先進或錯綜複雜。

有關我如何在沒有報告錯誤的情況下運行此操作,但在數據庫中有空技能表的任何見解?

謝謝,

回答

3

您的插入語句不會自動提交。從文檔上sqlite3.Connection

commit()

此方法提交當前事務。如果您不調用此方法,則自上次調用commit()以來執行的任何操作都是 ,而其他數據庫連接不可見。如果你想知道你爲什麼 沒有看到你寫入數據庫的數據,請檢查你的 不要忘記調用這個方法。

自動提交,use the connection as a context manager

# connection.commit() is called automatically upon exit of context manager 
# unless an exception is encountered, then connection.rollback() is called. 
with connection: 
    connection.execute(insert_statment) 
+0

謝謝;將接受(應該是connection.commit())。我早些時候嘗試提交,並得到一個錯誤。 – JonathanHayward