在Python MySQL中执行INSERT查询的正确方法是什么?

时间:2010-08-09 16:57:14

标签: python mysql

我有一个连接到本地MySQL数据库的python脚本。我知道它正确连接,因为我可以做到这一点并获得正确的结果:

cursor.execute(“SELECT * FROM reel”)

但是当我尝试做任何插入语句时,它什么都不做。没有错误消息,没有例外。当我从sqlyog检查时,数据库中没有显示任何内容。这就是我的代码:

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

其中tups是一个看起来像这样的元组列表('0000-00-0000:00 00:00','text')。没有错误显示,如果我将生成的SQL查询复制粘贴到sqlyog中,则可以正常工作。我已经尝试生成查询并对其执行cursor.execute()并且没有错误也没有结果。谁知道我做错了什么?

1 个答案:

答案 0 :(得分:7)

您需要在self.cursor.commit()

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

从1.2.0开始,默认情况下,MySQLdb根据DB-API标准(PEP-249)的要求禁用自动提交。如果您使用的是InnoDB表或其他类型的事务表类型,则需要在关闭连接之前执行connection.commit(),否则您的更改都不会写入数据库。

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

重要说明:某些SQL语句(特别是像CREATE TABLE这样的DDL语句)是非事务性的,因此无法回滚,并且它们会导致挂起的事务提交。

Is a FAQ