首页 > 解决方案 > 在 Windows 10 中读取路径以将数据库从 postgres 复制到 csv 时出错

问题描述

我正在尝试从 postgres 数据库中获取一个表并将该 csv 的内容复制到一个表中。我得到的错误是psycopg2.error.SyntaxError: syntax error at or near "C"我查看了其他有同样错误的人,但问题是我已经尝试了每个人的建议,我正在打印我的路径以确保它是正确的,我已经复制并粘贴了图形进入文件管理器并打开 csv 所以我对这个问题感到困惑。

path1 = r'C:\Users\Hank\Documents'
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 中运行。

标签: pythonpostgresqlpsycopg2

解决方案


下面的代码是我的问题的解决方案。基本上问题是我首先必须用python打开CSV,然后用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()

推荐阅读