我正试图将一个csv文件导入到psql数据库中。在阅读了关于COPY
和\copy
之间差异的文章后,当我执行我的脚本时出现了以下错误。
这是我代码的一部分:
try:
csv_data = os.path.realpath('test.csv')
con = psycopg2.connect(database = 'db01', user = 'postgres')
cur = con.cursor()
cur.execute("\copy stamm_data from '%s' DELIMITER ';' csv header" % csv_data)
con.commit()
这里是错误:
Error: syntax error at or near "\"
LINE 1: \copy stamm_data from '/home/jw/dev/test.csv' delimiter ';' ...
^
使用 COPY
时出现以下情况:
Error: could not open file "/home/jw/dev/test.csv" for reading: Permission denied
尽管psql用户“postgres”是超级用户,而且Ubuntu用户在运行脚本时对test.csv文件具有读取权限。
有什么想法吗?
\copy
是用于 psql 命令行工具的。Python 有copy_from
和copy_to
,可以实现相似的功能。 - Daniel Véritécopy_expert
而不是copy_from
。 - Daniel Véritécopy_expert
.. 使用copy_expert
需要超级用户权限,这正是我想要避免的.. 顺便问一下,copy_expert
和psycopg2.execute("COPY..")
有什么区别吗? - jwiFROM STDIN
,这意味着客户端正在将内容流式传输到服务器,而不是要求服务器打开自己文件系统中具有自己权限的文件。 - Daniel Véritépsycopg2.execute("COPY..")
只能用于服务器文件系统上的文件,因为如果使用psycopg2.execute("COPY tablename FROM STDIN...")
,那么你如何提供输入数据呢?这就是copy_expert
的作用。 - Daniel Vérité