Создание инструкций SQL из CSV в Python (Словари, JSON, список)

#python #json #pandas #list #dictionary

Вопрос:

Идея состоит в том, чтобы прочитать в файле CSV таблицу, подобную следующей:

введите описание изображения здесь

 DATABASE,SCHEMA,TABLE,COLUMN,TYPE,LENGTH
D1,S1,T1,C1,NUMBER,5
D1,S1,T1,C2,VARCHAR,25
D1,S1,T2,C1,NUMBER,5
D1,S1,T2,C2,VARCHAR,25
D1,S2,T1,C1,NUMBER,5
D1,S2,T1,C2,VARCHAR,25
D1,S2,T2,C1,NUMBER,5
D1,S2,T2,C2,VARCHAR,25
 

И в python создайте соответствующий запрос в строковой переменной, например:

 create table <s1>.<t1> (c1 number(5), c2 varchar(25));
create table <s1>.<t2> (c1 number(5), c2 varchar(25));
create table <s2>.<t1> (c1 number(5), c2 varchar(25));
create table <s2>.<t2> (c1 number(5), c2 varchar(25));
 

Моя идея состоит в том, чтобы сохранить таблицу в массиве json, или я могу использовать pandas, но я не знаю, какой был бы самый простой способ выполнить ее в соответствии с используемыми итерациями

Комментарии:

1. Вы не возражаете против размещения csv-версии, которую можно скопировать в текстовый редактор?

2. Я добавил таблицу, чтобы вы могли скопировать

Ответ №1:

Предполагая , что ваш фрейм данных таков df , используйте:

 groups = df.groupby(["SCHEMA", "TABLE"]).agg({"COLUMN": list, "TYPE": list, "LENGTH": list})
for (schema, table), row in groups.iterrows():
    record = zip(row["COLUMN"], row["TYPE"], row["LENGTH"])
    columns = ", ".join(f"{column} {type_}({length})" for column, type_, length in record)
    sentence = f"create table <{schema}>.<{table}> {columns};"
    print(sentence)
 

Выход

 create table <S1>.<T1> C1 NUMBER(5), C2 VARCHAR(25);
create table <S1>.<T2> C1 NUMBER(5), C2 VARCHAR(25);
create table <S2>.<T1> C1 NUMBER(5), C2 VARCHAR(25);
create table <S2>.<T2> C1 NUMBER(5), C2 VARCHAR(25);