MySQL 和 Python:Auto_Increment 不适用于 cursor.executemany()

Posted

技术标签:

【中文标题】MySQL 和 Python:Auto_Increment 不适用于 cursor.executemany()【英文标题】:MySQL and Python: Auto_Increment Not Working with cursor.executemany() 【发布时间】:2018-02-04 10:01:41 【问题描述】:

我创建了一个如下表:

    cur.execute("""CREATE TABLE IF NOT EXISTS worddata(
               wordid INT(11) AUTO_INCREMENT PRIMARY KEY,
               Keyword VARCHAR(100) NOT NULL,
               FileName VARCHAR(100));""")

然后使用:

     cur.executemany("INSERT INTO worddata VALUES(%s, %s, %s)", wordData)

其中 wordData 是具有多个条目的元组列表。

这不起作用。我尝试了以下操作:

    如果我从 CREATE TABLE 语句中删除“wordid INT(11) AUTO_INCREMENT PRIMARY KEY”并删除其中一个占位符 (%s),它可以正常工作。

    如果我只是按照某些帖子中针对 cursor.execute 的建议删除占位符 (%s) 之一,则它不起作用(注意我必须使用“cursor.executemany”)

    李>

    我什至尝试在 INSERT 阶段使用 wordData(Keyword, FileName),但不起作用。

    尝试了许多其他选项,例如在 INSERT 和 CREATE 期间放置 DEFAULT、NULL、O 等,但均未奏效。

mysql 中插入条目时,我可以使用 cursor.executemany 以及 Auto_Increment 和元组列表的出路是什么。

【问题讨论】:

不是我的字段,但您插入一个设置为自动增量的字段是否有意义? @roganjosh 正如上面第 3 点所述,我也尝试过。没用。 其实你说的正好相反。在第 1 点中,当您删除对我来说没有意义的部分时,它起作用了。 wordData 长什么样子? @roganjosh 在第 1 点中,我提到我完全删除了 wordid Auto_Increment 键,然后它工作正常。 【参考方案1】:

解决方法很简单:

我使用元组元组,例如:(('bye', '36930001437'), ('good', '36930001437'), ('night', '36930001437'))

诀窍是使用元组列表:[('bye', '36930001437'), ('good', '36930001437'), ('night', '36930001437')]

通过这个简单的更改,我现在获得了 Auto_Increment 列,而插入值命令没有任何问题。

【讨论】:

以上是关于MySQL 和 Python:Auto_Increment 不适用于 cursor.executemany()的主要内容,如果未能解决你的问题,请参考以下文章

Maven+SpringMVC+Mybatis整合入门Demo

mysql-connector-python、mysql-connector-python-rf 和 mysql-connector-repackaged 有啥区别?

cmd和python的mysql连接方法

Python之路-python(mysql介绍和安装pymysqlORM sqlachemy)

MySQL在cmd和python下的常用操作

python操作mysql③python操作mysql的orm工具sqlaichemy安装配置和使用