2016-08-04 110 views
0

我试图通过从查询中创建一个元组列表来重建一个SQL表,然后用我需要改变的数据创建一个新的元组列表,然后将元组列表插入到元组中SQL。除了一件事外,我似乎已经把所有东西都弄倒了。当我重新创建列表时,SQL查询中可能有任意数量的列,我需要对此进行补偿。唯一需要改变的值是每个元组中的第一个值。这里是我到目前为止的代码:复制和修改元组列表

import pymysql 

cnx=pymysql.connect(dbstuff) 
cursor=cnx.cursor() 
cursor.execute("SELECT * FROM og_tbl ORDER BY ip_addr,Port ASC") 
results=cursor.fetchall() 

i=1 
list=[] 
for line in results: 
    list.append((i,line[1:])) 
    i += 1 
values = ', '.join(map(str,list)) 
query="INSERT INTO tmp_tbl VALUES {}".format(values) 
cursor.execute(query) 
cnx.commit() 
cnx.close() 

这让我看起来像下面的每个元组的结果。我无法弄清楚如何做到这一点,因此括号只在每个元组的外部。

(1,(sqlstuff)),(2,(sqlstuff))等

回答

0

您有元组返回的元组,其被插入在另一元组切片之前追加 。您应该将新值作为元组添加到切片。

我已经更换了for循环列表理解和使用enumerate开始1,生成新的价值观:

lst = [(i,)+line[1:] for i, line in enumerate(results, 1)] 

在一个侧面说明,注意不要使用名称list因为这已经被内建使用。

+0

完美的作品。谢谢! – Daryl