如何在 Python 中使用 psql "\copy"?

How do I use psql "\copy" in Python?

我正在尝试将 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_from 的解决方案工作正常 - 我从 csv-file 中删除 header 并使用 copy_from 导入该文件。

但现在我 运行 遇到以下错误:

Error: null value in column "id" violates not-null constraint
DETAIL:  Failing row contains (null, foo01, ACE001, 3).

我的 table 有以下列:

ID, hotelcode, hotelname, stars

ID是我的PK,所以不能去掉NOT NULL修饰符。如何为每行导入 ID?或者我怎么说 Postgres 用值 'DEFAULT' 填充列 ID,以便数据库自己生成 ID?