问题描述
我正在尝试从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()