PyMySQL executemany INSERT 来自变量的列表
PyMySQL executemany INSERT List from variable
我正在尝试使用 pymysql 在 mysql table 中插入一些数据,但失败了。
数据已经保存在变量中,因此我需要将它们传递给 INSERT 语句。
这就是我目前正在尝试的...
con = pymysql.connect(host='*.*.*.*', port=***, user='****',
passwd='***', db='****')
with con:
cur = con.cursor()
sql = ("INSERT INTO groupMembers (groupID, members) VALUES (%s, %s)")
data = (groupID, (x for x in membersList))
cur.executemany(sql, data)
con.commit()
con.close()
我尝试传递的数据如下所示....
groupID = G9gh472
membersList = [戴夫、鲍勃、迈克、比尔、科林]
列表的长度未知,可能会有所不同
结果 table 我想看起来像这样...
| groupID | members |
+---------+---------+
| G9gh472 | Dave |
| G9gh472 | Bob |
| G9gh472 | Mike |
| G9gh472 | Bill |
| G9gh472 | Colin |
我已经根据阅读其他答案尝试了一些变体,但到目前为止我尝试过的都没有奏效。
谢谢大家
您传递给 executemany
函数的数据变量是一个元组
但函数需要 sequence/mapping。
cursor.executemany(operation, seq_of_params)
是函数签名。这就是您的代码无法正常工作的原因。
生成序列的一种方法如下。
product(x,y) returns ((x,y) for x in A for y in B)
product([groupId], members)
returns 元组的元组(序列)。
您可以参考下面的代码 -
import itertools
with con.cursor() as cur: # a good practice to follow
sql = ("INSERT INTO test (id, memb) VALUES (%s, %s)")
cur.executemany(sql, itertools.product([groupId], members)) # the change needed
con.commit()
According to the pymysql docs executemany 函数需要数据的序列或映射序列。
你可以做到
data = list([(groupID, x) for x in membersList]) # Create a list of tuples
这应该可以解决问题。这是更新后的代码片段-
con = pymysql.connect(host='*.*.*.*', port=***, user='****',
passwd='***', db='****')
with con:
cur = con.cursor()
sql = ("INSERT INTO groupMembers (groupID, members) VALUES (%s, %s)")
data = list([(groupID, x) for x in membersList]) # Create a list of tuples
cur.executemany(sql, data)
con.commit()
con.close()
我正在尝试使用 pymysql 在 mysql table 中插入一些数据,但失败了。 数据已经保存在变量中,因此我需要将它们传递给 INSERT 语句。
这就是我目前正在尝试的...
con = pymysql.connect(host='*.*.*.*', port=***, user='****',
passwd='***', db='****')
with con:
cur = con.cursor()
sql = ("INSERT INTO groupMembers (groupID, members) VALUES (%s, %s)")
data = (groupID, (x for x in membersList))
cur.executemany(sql, data)
con.commit()
con.close()
我尝试传递的数据如下所示....
groupID = G9gh472
membersList = [戴夫、鲍勃、迈克、比尔、科林]
列表的长度未知,可能会有所不同 结果 table 我想看起来像这样...
| groupID | members |
+---------+---------+
| G9gh472 | Dave |
| G9gh472 | Bob |
| G9gh472 | Mike |
| G9gh472 | Bill |
| G9gh472 | Colin |
我已经根据阅读其他答案尝试了一些变体,但到目前为止我尝试过的都没有奏效。 谢谢大家
您传递给 executemany
函数的数据变量是一个元组
但函数需要 sequence/mapping。
cursor.executemany(operation, seq_of_params)
是函数签名。这就是您的代码无法正常工作的原因。
生成序列的一种方法如下。
product(x,y) returns ((x,y) for x in A for y in B)
product([groupId], members)
returns 元组的元组(序列)。
您可以参考下面的代码 -
import itertools
with con.cursor() as cur: # a good practice to follow
sql = ("INSERT INTO test (id, memb) VALUES (%s, %s)")
cur.executemany(sql, itertools.product([groupId], members)) # the change needed
con.commit()
According to the pymysql docs executemany 函数需要数据的序列或映射序列。
你可以做到
data = list([(groupID, x) for x in membersList]) # Create a list of tuples
这应该可以解决问题。这是更新后的代码片段-
con = pymysql.connect(host='*.*.*.*', port=***, user='****',
passwd='***', db='****')
with con:
cur = con.cursor()
sql = ("INSERT INTO groupMembers (groupID, members) VALUES (%s, %s)")
data = list([(groupID, x) for x in membersList]) # Create a list of tuples
cur.executemany(sql, data)
con.commit()
con.close()