Пока можно превратить массив в набор столбцов у вас не будет фиксированного набора столбцов. Например, если вы разделите father_name
на три части, это нормально для John Wilkes Booth
, но как насчет Yarrow Hock
? Или Beyoncé
? Или Bernal Diaz Del Castillo
? Вам нужно что-то более умное, чем просто разделение на пробелы.
Хотя вы могли бы написать что-то в Postgresql, вероятно, в виде хранимой процедуры , проще, хотя и медленнее, выполнять преобразования данных в Python. Так как вам все равно придется запускать данные через Python (или делать что-то сложное, чтобы связать две базы данных), и, поскольку (надеюсь) это разовая вещь, производительность не критична.
Я не очень хорош в Python, но было бы что-то вроде этого.
cur_t.execute("""SELECT studentnumber, father_name FROM something""")
for row in cur_t:
father = parse_name(row['father_name'])
student_id = fix_studentnumber(row['studentnumber'])
cur_p.execute("""
INSERT INTO "a_recipient" (student_id, f_name, f_middle_name, f_last_name)
VALUES ('%s', '%s', '%s', '%s')
""" % (student_id, father['first'], father['middle'], father['last'])
)
Тогда вы напишите parse_name
и fix_studentnumber
и любые другие необходимые функции для очистки данных в Python. И вы можете их модульное тестирование.
Примечание: поскольку доступ к столбцам по номеру (т. Е. row[5]
) трудно читать и поддерживать, вы, вероятно, захотите использовать conn_t.cursor(cursor_factory=psycopg2.extras.DictCursor)
, чтобы вы могли получить доступ к столбцам по имени, как я указал выше.