我有一个表,技能,尽管我尝试向其中添加行,但它目前是空的。我在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操作不是特别高级或复杂。
如何了解如何在没有报告错误的情况下运行此操作,但数据库中有空技能表?
谢谢,
答案 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)