Ошибка psycopg2 при записи данных из CSV-файла: дополнительные данные после последнего ожидаемого столбца - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь вставить данные из файла CSV (file.csv) в два столбца таблицы в Postgres. Данные выглядят так:

#Feature AC;Feature short label
EBI-517771;p.Leu107Phe
EBI-491052;p.Gly23Val
EBI-490120;p.Pro183His
EBI-517851;p.Gly12Val
EBI-492252;p.Lys49Met
EBI-527190;p.Cys360Ser
EBI-537514;p.Cys107Ser

Код, который я запускаю, выглядит следующим образом:

# create table in ebi_mut_db schema
cursor.execute("""
CREATE TABLE IF NOT EXISTS ebi_mut_db.mutations_affecting_interactions(
feature_ac TEXT,
feature_short_label TEXT)
""")

with open(file.csv', 'r') as f:
# Notice that we don't need the `csv` module.
    next(f) # Skip the header row.
    cursor.copy_from(f, 'ebi_mut_db.mutations_affecting_interactions', sep=';')

conn.commit()

Таблица создана, но во время записи данных отображается ошибка ниже.

Traceback (most recent call last):
  File "stdin<>", line 38, in <module>
    cursor.copy_from(f, 'ebi_mut_db.mutations_affecting_interactions', sep=';')
psycopg2.errors.BadCopyFileFormat: extra data after last expected column
CONTEXT:  COPY mutations_affecting_interactions, line 23: "EBI-878110;"p.[Ala223Pro;Ala226Pro;Ala234Asp]""

Нет дополнительных столбцов, кроме двух. Насколько я понимаю, код обнаруживает более 2 столбцов.

Спасибо

1 Ответ

0 голосов
/ 17 января 2020

Вы не сообщили COPY, что используете формат CSV, поэтому он использует формат TEXT по умолчанию. В этом формате заключение в кавычки не защищает специальные символы, и поскольку имеется более одного ;, имеется более двух столбцов.

Если вы хотите, чтобы COPY знала, что ; внутри кавычек не учитываются в качестве разделителей, вы должны указать ему использовать формат CSV. В psycopg2 я думаю, что вы должны использовать copy_expert, а не copy_from, чтобы выполнить sh this.

...