手头的任务是将表 1 中所示的数据移动到表 2 中。
表格1)
ID Val
-- ---
1 a
1 b
1 c
2 k
3 l
3 m
3 n
Val 列取决于每个 ID 的唯一值的数量。在这种情况下它是 3,但在现实世界中它可以是 20!
表(2)
ID Val1 Val2 Val3
-- -- -- --
1 a b c
2 k
3 l m n
对于较小的 Val 列值(在本例中为 3),我如何处理它:
我创建了一个临时表。
create table test(ID int not null, b int auto_increment not null,primary key(ID,b), Val varchar(255));
然后我插入数据进行测试。
我得到以下信息(我必须手动创建 Val 列):
ID Val b
-- --- --
1 a 1
1 b 2
1 c 3
2 k 1
3 l 1
3 m 2
3 n 3
我知道这是一个繁琐的过程,需要大量的手工工作。这是在我爱上 Python 之前!非常感谢 Python 中针对此问题的有效解决方案!
这是我到目前为止所拥有的
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()