Psycopg2 вопрос по импорту CSV - PullRequest
0 голосов
/ 26 апреля 2018
def import_from_csv(common_cols_tup, table_name):
"""

:param common_cols_tup: tuple of all columns
:param table_name: database table name
:return:
"""
with open('/tmp/%s.csv'%table_name, 'r') as f:
    # Notice that we don't need the `csv` module.
    next(f)  # Skip the header row.
    dest_cur.copy_from(f, table_name, sep=";",null='\\N', columns=common_cols_tup)
dest_cur.commit()

Я получаю следующую трассировку при попытке попробовать этот фрагмент кода

Файл "migrate.py", строка 29, в import_from_csv dest_cur.copy_from (f, имя_таблицы, sep = ";", null = '\ N', columns = common_cols_tup) psycopg2.extensions.QueryCanceledError: COPY из stdin завершилась ошибкой: ошибка в вызове .read (): exceptions.ValueError Смешивание итераций и методов чтения приведет к потере данных. CONTEXT: COPY res_partner, строка 1

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Я решил это как

def import_from_csv(common_cols_tup, table_name):
    """

    :param common_cols_tup: tuple of all columns
    :param table_name: database table name
    :return:
    """
    with open('/tmp/%s.csv'%table_name, 'r') as f:
        # Notice that we don't need the `csv` module.
        next(f)  # Skip the header row.
        content = StringIO('\n'.join(line for line in f))
        dest_cur.copy_from(content, table_name, sep=";",null='\\N', columns=common_cols_tup)
    dest_cur.commit()
0 голосов
/ 26 апреля 2018

Ключом является внутренняя ошибка:

exceptions.ValueError Mixing iteration and read methods would lose data 

Согласно этому ответу SO ошибка возникает из-за использования next и readline для одного и того же дескриптора файла.Если вы используете readline, чтобы пропустить строку заголовка, то я думаю, что все будет в порядке.

...