如何在 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?
我正在尝试将 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?