我正在尝试将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'是 super 用户,而运行脚本的ubuntu用户对test.csv文件具有读取权限。

有任何想法吗?

最佳答案

好的,我们开始吧。copy_from的解决方案效果很好-我从csv文件中删除了 header ,并使用copy_from导入了该文件。

但是现在我遇到了以下错误:

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

我的表包含以下列:
ID, hotelcode, hotelname, stars

ID是我的PK,因此无法删除NOT NULL修饰符。如何导入每行的ID?或者我怎么说Postgres用值'DEFAULT'填充列ID,以便数据库自己生成ID?

关于postgresql - 如何在Python中使用psql "\copy"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28809827/

10-13 09:30