Pythonistas,如何在MySQL中从上到下、从左到右移动数据(考虑每个ID的多个值)?

Pythonistas,如何在MySQL中从上到下、从左到右移动数据(考虑每个ID的多个值)?,python,mysql,data-manipulation,Python,Mysql,Data Manipulation,手头的任务是将表1中所示的数据移动到表2中的数据 表(1) Val列取决于每个ID的唯一值的数量。在本例中,它是3,但在现实世界中可以是20 表(2) 对于较小值的Val列(本例中为3),我如何处理它: 我创建了一个临时表 create table test(ID int not null, b int auto_increment not null,primary key(ID,b), Val varchar(255)); 然后我将数据插入到测试中 我得到以下信息(我必须手动创建Val列):

手头的任务是将表1中所示的数据移动到表2中的数据

表(1)

Val列取决于每个ID的唯一值的数量。在本例中,它是3,但在现实世界中可以是20

表(2)

对于较小值的Val列(本例中为3),我如何处理它:

我创建了一个临时表

create table test(ID int not null, b int auto_increment not null,primary key(ID,b), Val varchar(255));
然后我将数据插入到测试中

我得到以下信息(我必须手动创建Val列):

我知道这是一个繁琐的过程,需要大量的手工工作。这是在我爱上蟒蛇之前!非常感谢Python为这个问题提供了一个有效的解决方案

这就是我目前所拥有的
pytonic的方法是使用

返回

1 ['a', 'b']
2 ['c']

您需要的是
sort()
。这是适当的<代码>已排序将返回已排序的副本,但您没有将其分配给任何对象。我已使用您的解决方案进行了更新。你能帮我填充(无)列数最多的数据并统一插入数据库吗?我将创建Val列(val1、val2,…手动)。非常感谢。首先,如果打印的数据正确,用finallist.append([i[k[1]代表k in j])替换print i[k[1]代表k in j],现在可以运行cursor.executemany('INSERT INTO table(ID,Val1,Val2,Val3)value(%s,%s);(finallist[0,finallist[1]),我想ut应该可以工作
create table test(ID int not null, b int auto_increment not null,primary key(ID,b), Val varchar(255));
ID  Val  b
--  ---  --
1   a    1
1   b    2
1   c    3
2   k    1
3   l    1
3   m    2
3   n    3
import MySQLdb
import itertools
import dbstring

cursor = db.cursor()

cursor.execute("select ID, val from mytable")
mydata = cursor.fetchall()

IDlist = []
vallist = []
finallist = []

for record in mydata:
    IDlist.append(record[1])
    vallist.append(record[2])

zipped = zip(IDlist,vallist)
zipped.sort(key=lambda x:x[0])

for i, j in itertools.groupby(zipped, key=lambda x:x[0]):
    finallist = [k[1] for k in j]
finallist.insert(0, i)
finallist += [None] * (4 - len(finallist))  ### Making it a uniform size list
    myvalues.append(finallist)

cursor.executemany("INSERT INTO temptable VALUES (%s, %s, %s, %s)", myvalues)


db.close()
import itertools

a = [(1, 'a'), (1, 'b'), (2, 'c')]

# groupby need sorted value so sorted in case
a.sort(key=lambda x:x[0])

for i, j in itertools.groupby(a, key=lambda x:x[0]):
    print i, [k[1] for k in j]
1 ['a', 'b']
2 ['c']