Ошибка чтения пути в Windows 10 для копирования базы данных из postgres в csv

#python #postgresql #psycopg2

#python #postgresql #psycopg2

Вопрос:

Я пытаюсь взять таблицу из базы данных postgres и скопировать содержимое этого csv в таблицу. Ошибка, которую я получаю, заключается в том, что psycopg2.error.SyntaxError: syntax error at or near "C" я посмотрел на других людей, у которых была такая же ошибка, но проблема в том, что я уже попробовал то, что все предлагают, и я распечатываю свой путь, чтобы убедиться, что он правильный, и я скопировал и вставил этот график в файловый менеджер, и он открывает csv, поэтому я в замешательстве относительно проблемы.

 path1 = r'C:UsersHankDocuments'
tb = 'test29'
path = os.path.join(path1,"Testing.csv")
print(f"This is the output path fro the csv {path}")
def csv_to_postgres():
    sql = f"""COPY {tb} FROM {path} DELIMITER ',' CSV HEADER;"""
    cur.execute(sql)
    conn.commit()
    print(f"Printing to {path} was successful.")
csv_to_postgres()
  

Я также пробовал string as "sql query {}".format(path) и "sql query %s" path , но ни один из трех не работает. Распечатанный путь был введен в функцию поиска Windows 10 и открывает CSV.

Благодаря комментарию мне также было показано, что я мог бы просто использовать, os.path.exists(path) чтобы увидеть, существует ли путь, и он возвращает True , поэтому я заблудился.

В дополнение к этому я смог заставить команду работать в pgAdmin, изменив права доступа к файлам для всех, но тот же точный код по-прежнему не выполняется в Python.

Комментарии:

1. На будущее, если вы не уверены в путях в своем коде, вместо того, чтобы печатать и вставлять его в поиск Windows, добавьте проверку os.path.exists (путь).

2. Не знал, что это существует, спасибо! К сожалению, это также возвращается True , поэтому я все так же потерян, потому что он сообщает мне, что он существует и не существует одновременно.

Ответ №1:

Приведенный ниже код является решением моей проблемы. В основном проблема заключалась в том, что мне сначала пришлось открыть CSV с помощью python, а затем использовать copy_expert для его копирования. tb это имя таблицы, которое, я полагаю, вам нужно STDIN в запросе sql.

 sql = f"""COPY {tb} FROM STDIN DELIMITER ',' CSV HEADER;"""
with open(path) as f:
    cur.copy_expert(sql,f)
conn.commit()