2014-04-01 54 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