我正试图从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()
我也尝试过字符串作为"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()