我有一个名单
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)
答案 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)