2016-07-28 3 views
1

У меня есть существующая таблица в Postgresql, которая имеет столбец id (serial) для идентификации строки и является первичным ключом. У меня есть сценарий для импорта CSV, который не содержит столбца id. Вот код, я использую:Импорт CSV без первичного ключа в существующую таблицу

file_list = glob.glob(path) 

for f in file_list: 
    if os.stat(f).st_size != 0: 
     filename = os.path.basename(f) 
     arc_csv = arc_path + filename 

     data = pandas.read_csv(f, index_col = 0) 
     ind = data.apply(lambda x: not pandas.isnull(x.values).any(),axis=1) 
     data[ind].to_csv(arc_csv) 
     cursor.execute("COPY table FROM %s WITH CSV HEADER DELIMITER ','",(arc_csv,)) 
     conn.commit() 
     os.remove(f) 
    else: 
     os.remove(f) 

Сценарий не может импортировать CSV с современностью идентификатор (p_key) столбца в таблице из-за этого не существует в CSV, так что у меня есть 2 варианта я могу думать : 1- Выполните команду, чтобы удалить столбец идентификатора перед импортом и добавить его обратно после импорта, или 2- Найдите способ увеличить столбец идентификаторов с помощью моей команды cursor.execute.

Мой вопрос в том, какой подход лучше и хороший способ обойти это (или, конечно, у кого-то есть лучшая идея!)? Благодарю.

+0

что панды там делает? Опубликовать образец строки вашего CSV показать вашу структуру таблицы – e4c5

+0

Поскольку вы уже используете Python, вы можете просто перебирать строки данных csv самостоятельно и вставлять их по отдельности и не беспокоиться о ограничениях 'COPY FROM' , – larsks

ответ

1

Команда COPY содержит столбцы, которые вы хотите вставить. Вы должны пропустить ПК в списке столбцов: COPY таблица (col1, col2, ...)

COPY documentation

+0

DOH! Пробовал это изначально и думал, что я что-то прикрутил, потому что это не сработало. Понял, что мой колледж по именованию все испортил. Сделал его единообразным во всех сценариях и таблицах. Теперь нет проблем. Благодаря! – Jeff

Смежные вопросы