2010-08-09 74 views
0

我有一个连接到本地MySQL数据库的python脚本。我知道这是正确的连接,因为我能做到这一点,并得到正确的结果:在Python MySQL中执行INSERT查询的正确方法是什么?

cursor.execute(“SELECT * FROM卷轴”)

但是当我尝试做任何插入语句只是什么都不做。没有错误信息,没有例外。当我从sqlyog检查它时,数据库中没有显示出来。这是我的代码如下所示:

self.cursor.executemany( “INSERT INTO卷轴(ETIME,ETEXT)VALUES(%S,S)”,tups)

其中tups是一个元组列表看起来像这样('0000-00-00 00:00:00','文字')。没有错误出现,如果我复制粘贴生成的SQL查询到sqlyog它的作品。我试着生成查询并对其执行cursor.execute(),没有错误,也没有结果。任何人都知道我在做什么错了?

回答

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语句(特别是DDL语句,如CREATE TABLE)是非事务性的,因此它们无法回退,并导致未决事务提交。

Is a FAQ

+0

应connection.commit(),但正确的想法 – ig0774 2010-08-09 17:02:24

+0

感谢...就是这样。我读了像Python的4个不同的指南MySQL,我从来没有注意到说要做的部分大声笑。 – Barakat 2010-08-09 17:08:37

+0

是的,我遇到了MySQL 5.1.3及更早版本的问题,我不需要添加commit语句,但是在MySQL 5.1.42及更高版本中,我必须在''conn.commit()'之后添加'conn.commit()执行'语句。 – 2010-08-09 17:13:10

相关问题