Postgresql \COPY TO Postgres语句在bash中工作,但不使用python psycopg2

Postgresql \COPY TO Postgres语句在bash中工作,但不使用python psycopg2,postgresql,psycopg2,Postgresql,Psycopg2,我试图在脚本中使用psycopg2将数据从Postgres数据库导出到文件 我可以从我的终端成功运行以下程序,并且它可以正常工作,没有问题: psql -h myhost -p myport -U myuser -d mydbname -c "\COPY ( SELECT member_id FROM member_reward_transaction LIMIT 5) TO ~/Desktop/testexport.txt (FORMAT csv, DELIMITER '|', HEADER

我试图在脚本中使用psycopg2将数据从Postgres数据库导出到文件

我可以从我的终端成功运行以下程序,并且它可以正常工作,没有问题:


psql -h myhost -p myport -U myuser -d mydbname -c "\COPY ( SELECT member_id FROM member_reward_transaction LIMIT 5) TO ~/Desktop/testexport.txt (FORMAT csv, DELIMITER '|', HEADER 0)"
我可以使用subprocess调用上面的代码,但我想知道为什么下面的代码不适用于我:

import configparser

config = configparser.ConfigParser()

config.read('config/qa_config.ini')

dbname=config['postgres-rewards']['db_name']
host=config['postgres-rewards']['host']
port=config['postgres-rewards']['port']
user=config['postgres-rewards']['user']
password=config['postgres-rewards']['password']

con = psycopg2.connect(database=dbname,user=user,password=password,host=host,port=port)
cur = con.cursor()
f = open('exports/test_export.csv')
cur.copy_to(f, 'member_reward_transaction', columns=('member_id', 'sponsor_id'), sep=",")
con.commit()
con.close()
运行脚本时出错:

  File "tests2.py", line 17, in <module>
    cur.copy_to(f, 'member_reward_transaction', columns=('member_id', 'sponsor_id'), sep=",")
psycopg2.errors.WrongObjectType: cannot copy from partitioned table "member_reward_transaction"
HINT:  Try the COPY (SELECT ...) TO variant.
文件“tests2.py”,第17行,在
当前复制到(f,‘会员奖励交易’,列=(‘会员id’、‘赞助商id’),sep=“,”)
psycopg2.errors.ErrorObjectType:无法从分区表“成员奖励交易”复制
提示:尝试复制(选择…)到变体。

使用Python 3.6.5、PostgreSQL 11.5

就像错误消息所说的,您必须使用

COPY (SELECT ... FROM partitioned_table) TO STDOUT;
如果要使用分区表

您的
psql
命令可以做到这一点,但psycopg2使用的是纯旧的

COPY partitioned_table TO STDOUT;
这不管用

使用它可以提交您自己的
副本
声明