Динамическое создание таблицы из файла csv с использованием psycopg2

Я хотел бы получить некоторое понимание по вопросу, который, как я был уверен, был ясен для меня. Есть ли способ создать таблицу с помощью psycopg2 или любого другого адаптера базы данных Python Postgres с именем, соответствующим файлу .csv и (вероятно, наиболее важным) со столбцами, указанными в файле .csv.


person Community    schedule 21.06.2012    source источник
comment
да, python — это язык программирования общего назначения, который позволит вам это сделать.   -  person monkut    schedule 21.06.2012


Ответы (1)


Я оставлю вас, чтобы вы внимательно посмотрели на библиотеку psycopg2 - это мне не приходит в голову (какое-то время мне не приходилось ее использовать, но документации IIRC достаточно).

Шаги:

  • Чтение имен столбцов из CSV-файла
  • Создайте «СОЗДАТЬ ТАБЛИЦУ» (...)
  • Возможно ВСТАВИТЬ данные

    import os.path my_csv_file = '/home/somewhere/file.csv' table_name = os.path.splitext(os.path.split(my_csv_file)[1])[0] cols = next(csv.reader(open(my_csv_file) )))

Вы можете уйти оттуда...

Создайте запрос SQL (возможно, используя механизм шаблонов для полей, а затем при необходимости выполните вставку)

person Jon Clements♦    schedule 21.06.2012
comment
Я определенно попробую ваше решение, но позвольте мне спросить об объявлении типа для каждого столбца, в основном я ожидаю только 2 типа файлов с разными столбцами между этими двумя типами. Можно ли сохранить тип для каждого столбца в словаре, а затем на основе типа файла передать этот словарь оператору создания таблицы. Я почти уверен, что это невозможно с типом словаря, но не могли бы вы указать возможную реализацию. Спасибо за быстрый ответ. - person ; 21.06.2012
comment
У вас может быть один словарь {'file1.csv': 1, 'file2.csv': 2, 'file3.csv': 1}, который сопоставляет имя файла с одним из двух ваших форматов файлов. Затем еще один, например { (1, 'имя'): 'текст', (1, 'пол'): 'символ (1)', (2, 'возраст'): 'целое число'}... Словарь содержит 2 кортежа типа файла и имени столбца и сопоставляется с типом столбца. Это то, что вы спрашиваете? - person Jon Clements♦; 21.06.2012
comment
Да, это именно то, о чем я спрашивал, но у меня были сомнения, примет ли оператор psycopg2 CREATE TABLE аргументы такого типа? Я собираюсь попробовать и, надеюсь, позже предоставлю код. Спасибо еще раз - person ; 21.06.2012
comment
Они не примут словарь, но вы используете их для создания допустимой строки запроса SQL. - person Jon Clements♦; 21.06.2012