[英]How to PSQL COPY with PYTHON
尝试使用 python 运行 PSQL COPY 命令。 我能够连接到给定 kube 集群中的正确数据库。
一旦我在 postgres 上,shell 就失去了踪迹。 当我退出时,我收到以下错误。 我在 os.system 调用的 PSQL 命令中使用的引号有什么问题吗?
import os
import subprocess
conn = 'gcloud container clusters get-credentials clusterA --zone us-west --project projectX'
pg = 'kubectl -n DB exec -it postgres -- bash'
if __name__ == '__main__':
subprocess.call(back_clus_conn, shell=True)
subprocess.call(pg, shell=True)
os.system('psql -U postgres -c "\COPY (SELECT * FROM "public"."tableName") TO tableName.csv DELIMITER ',' CSV"')
错误:
kubeconfig entry generated for clusterA.
Defaulted container "postgres" out of: postgres, postgres-exporter
bash-5.0#
bash-5.0# exit
exit
Traceback (most recent call last):
File "test.py", line 19, in <module>
os.system('psql -U postgres -c "\COPY (SELECT * FROM "public"."tableName") TO tableName.csv DELIMITER ',' CSV"')
TypeError: system() takes exactly 1 argument (2 given)
您可以在 postgres 容器 exec 子进程调用中运行命令,如下所示:
import subprocess
conn = 'gcloud container clusters get-credentials clusterA --zone us-west --project projectX'
copy_cmd = 'psql -U postgres -c "\COPY (SELECT * FROM "public"."tableName") TO tableName.csv DELIMITER ',' CSV"'
pg = f'kubectl -n DB exec -it postgres -- bash -c {copy_cmd}'
if __name__ == '__main__':
subprocess.call(back_clus_conn, shell=True)
subprocess.call(pg, shell=True)
根据sticky bit ,它告诉你给它两个arguments而不是一个。
目前您的代码是:
os.system('psql -U postgres -c "\COPY (SELECT * FROM "public"."tableName") TO tableName.csv DELIMITER ',' CSV"')
您可以尝试添加\',\'
以被 Phyton 识别
os.system('psql -U postgres -c "\COPY (SELECT * FROM "public"."tableName") TO tableName.csv DELIMITER \',\' CSV"')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.