在Python MySQL中如何正确执行INSERT查询?
我有一个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 个回答
在你执行完 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语句,是非事务性的,所以它们不能被撤销,并且会导致待处理的事务被提交。