提问人:ThinkCode 提问时间:11/3/2010 最后编辑:ThinkCode 更新时间:11/4/2010 访问量:217
Pythonistas,如何在MySQL中从上到下从左到右移动数据(考虑每个ID的多个值)?
Pythonistas, how do I move data from top to bottom to left to right in MySQL (think multiple values for each ID)?
问:
手头的任务是将表 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()
答:
2赞
mouad
11/3/2010
#1
执行此操作的 Pytonic 方法是使用 IterTools.GroupBy
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']
评论
1赞
neil
11/4/2010
这是你想要的。这样就位了。将返回一个排序的副本,但您没有将其分配给任何内容。sort()
sorted
0赞
ThinkCode
11/4/2010
我更新了您的解决方案。你能帮我用最多的数据填充(无)吗?的列并均匀地插入数据库?我将手动创建 Val 列 (val1,val2,..)。谢谢!
0赞
mouad
11/4/2010
首先,如果打印的数据是正确的,请将 print i, [k[1] for k in j] 替换为 finallist.append([i, [k[1] for k in j]]) 你现在可以运行 cursor.executemany('INSERT INTO table (ID, Val1, Val2, Val3) VALUES(%s, %s)', (finallist[0], finallist[1])) 我想UT应该可以工作
下一个:重塑错误 - 无效因子
评论