为什么这个sqlite3 insert语句没有添加一行?

时间:2014-04-01 14:14:01

标签: python sql sqlite cgi

我有一个表,技能,尽管我尝试向其中添加行,但它目前是空的。我在CGI脚本中有以下Python代码:

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 / skills有一个新添加的内容:

Reached 1!
Reached 2!
Reached 3!

但是,该表仍为空。 (脚本的其余部分在没有崩溃的情况下运行,并显示如果在没有传递任何CGI变量的情况下调用脚本,将会显示的内容。)

我还没有开始交易; SQL操作不是特别高级或复杂。

如何了解如何在没有报告错误的情况下运行此操作,但数据库中有空技能表?

谢谢,

1 个答案:

答案 0 :(得分: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)