我正在尝试将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/