在Python MySQL中如何正确执行INSERT查询?

1 投票
1 回答
1112 浏览
提问于 2025-04-16 02:32

我有一个Python脚本,它可以连接到本地的MySQL数据库。我知道连接是成功的,因为我可以这样做,并且得到了正确的结果:

cursor.execute("SELECT * FROM reel")

但是,当我尝试执行任何插入操作时,它就是没有反应。没有错误信息,也没有异常。当我从sqlyog检查数据库时,什么都没有显示。这是我的代码:

self.cursor.executemany("INSERT INTO reel (etime,etext) VALUES (%s,%s)", tups)

其中tups是一个元组列表,看起来像这样:('0000-00-00 00:00:00','text')。没有错误出现,如果我把生成的SQL查询复制粘贴到sqlyog中,它是可以工作的。我还尝试生成查询并在上面使用cursor.execute(),同样没有错误,也没有结果。有人知道我哪里出错了吗?

1 个回答

6

在你执行完 self.cursor.executemany("INSERT INTO reel (etime,etext) VALUES (%s,%s)", tups) 之后,需要用 self.cursor.commit() 来确认你的操作。

从版本1.2.0开始,MySQLdb 默认关闭了自动提交,这符合数据库API标准(PEP-249)。如果你使用的是InnoDB表或者其他类型的事务表,你需要在关闭连接之前执行 connection.commit(),否则你所做的更改将不会被写入数据库。

相反,你也可以使用 connection.rollback() 来撤销自上次提交以来所做的任何更改。

重要提示:某些SQL语句,特别是像创建表(CREATE TABLE)这样的DDL语句,是非事务性的,所以它们不能被撤销,并且会导致待处理的事务被提交。

这是一个常见问题解答

撰写回答