如何使用Python中的列表连续插入数据?

时间:2017-03-27 08:09:11

标签: python mysql

我有一个名单 rowdata = [u'android', u'TSC', u'airtime-ctg', u'guest', u'guest', u'8354e5f4-e18d-11e6-9a46-0242ac110002', u'77c7600c502a3d15'] 并希望在我的表ctg_payload中输入此数据。

我试过了:

sqlquery = 'insert into ctg_payload (ID,logtime,hostype,hostype,group_id,group_id,deviceid) values (%s,%s,%s,%s,%s,%s,%s) ; '%(rowdata)

cursor.executemany(sqlquery)

2 个答案:

答案 0 :(得分:2)

您无法使用%执行此操作,但您可以使用format和参数解包来执行此操作:

sqlquery = 'insert into ctg_payload (ID,logtime,hostype,hostype,group_id,group_id,deviceid) values ({},{},{},{},{},{},{}) ; '.format(*rowdata)

演示该功能的简单示例:

>>> "{},{}".format(*[1,2])
'1,2'

你可能意味着execute,而不是executemany多次执行,而不是你想要的

答案 1 :(得分:1)

正如Jean-FrançoisFabre提到的,当您执行单个查询时,*rowdata应该以str格式用于查询!

而且,

如果要执行一个查询,则必须使用execute()

  

此方法执行给定的数据库操作(查询或命令)。在元组或字典参数中找到的参数绑定到操作中的变量。使用%s或%(名称)的参数样式指定变量(即使用格式或pyformat样式)。如果multi为True,则execute()返回一个迭代器。

data=[[u'android', u'TSC', u'airtime-ctg', u'guest', u'guest', u'8354e5f4-e18d-11e6-9a46-0242ac110002', u'77c7600c502a3d15']]

for rowdata in data:
    sqlquery = 'insert into ctg_payload (ID,logtime,hostype,hostype,group_id,group_id,deviceid) values ({},{},{},{},{},{},{}) ; '.format(*rowdata)
    cursor.execute(sqlquery)

<{3}}

  

此方法准备数据库操作(查询或命令),并针对序列seq_of_params中找到的所有参数序列或映射执行它。

data=[[u'android', u'TSC', u'airtime-ctg', u'guest', u'guest', u'8354e5f4-e18d-11e6-9a46-0242ac110002', u'77c7600c502a3d15']]
sqlquery = 'insert into ctg_payload (ID,logtime,hostype,hostype,group_id,group_id,deviceid) values (%s,%s,%s,%s,%s,%s,%s) '
cursor.executemany(sqlquery,data)