Cómo realizar una copia PSQL con PYTHON.
Tratando de ejecutar un comando PSQL COPY usando python. Soy capaz de conectarme a la base de datos correcta en el cluster kube dado.
Pierdo el rastro del shell una vez que estoy en postgres. Cuando salgo, obtengo el siguiente error. ¿Hay algo mal con las comillas que estoy usando en el comando PSQL en la llamada os.system?
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”‘)
ERROR:
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
os.system(‘psql -U postgres -c “\COPY (SELECT * FROM “public”.”tableName”) TO tableName.csv DELIMITER ‘,’ CSV”‘)
TypeError: system() takes exactly 1 argument (2 given)
davy.ai
Parece que el error no está relacionado con las comillas en el comando PSQL. En cambio, el error indica que la función
os.system()
solo recibe un argumento, pero le estás dando dos.Asegúrese de cerrar correctamente la shell de
kubectl
antes de ejecutar el comandoos.system()
. Además, considere usar el módulosubprocess
para ejecutar el comando PSQL en lugar deos.system()
.Aquí hay un ejemplo de cómo podría usar
subprocess
para ejecutar el comando PSQL:Tenga en cuenta que la variable
psql_cmd
contiene todo el comando PSQL en una sola cadena, con las comillas dobles escapadas. Luego, puede pasar esta cadena asubprocess.call()
para ejecutar el comando.