读取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()

我也尝试将字符串设置为"sql query {}".format(path)"sql query %s" path,但三个都不起作用。打印出的路径已放入Windows 10搜索功能并打开CSV。

感谢评论,我还可以使用os.path.exists(path)查看路径是否存在,并且返回True,所以我迷路了。

要进一步添加内容,我可以通过更改Everyone的文件权限来使该命令在PgAdmin中起作用,但是相同的确切代码仍未在Python中运行。

解决方法

下面的代码是我的问题的解决方案。基本上,问题是我首先必须使用python打开CSV,然后使用copy_expert来将其复制到其中。tb是表名,我相信您在sql中需要STDIN查询。

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