Задача состоит в том, чтобы переместить данные, как показано в таблице 1, в таблицу 2.
Таблица (1)
ID Val
-- ---
1 a
1 b
1 c
2 k
3 l
3 m
3 n
Значения столбцов зависят отколичество уникальных значений для каждого идентификатора.в данном случае это 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()