PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Python psql \menyalin CSV ke server jauh

Cobalah untuk tidak menggunakan shell=True jika Anda bisa menghindarinya. lebih baik untuk menandai perintah itu sendiri untuk membantu sh.

subprocess.call(["psql", "-U", "{user}", "-h", "{ip}", "-d", "{db}", "-w", "{pw}", "-c", "{copy statement}"])

Dalam hal ini maka pernyataan salinan Anda bisa seperti yang diteruskan ke psql kata demi kata, karena tidak ada shell mengutip masalah untuk dipertimbangkan. (N.B. masih harus mengutip ini untuk python, jadi string akan tetap apa adanya).

Jika Anda masih ingin menggunakan shell=True maka Anda harus keluar dari string literal untuk python dan cangkang

"\"\copy table (col1, col2) FROM file_location CSV HEADER QUOTE '\\\"' NULL ''\""

akan membuat string dalam python yang akan menjadi

"\copy table (col1, col2) FROM file_location CSV HEADER QUOTE '\"' NULL ''\"

Itulah yang kami temukan di cangkang kami sejak awal!

Sunting (mengklarifikasi sesuatu dari komentar):

subprocess.call , saat tidak menggunakan shell=True , mengambil argumen yang dapat diubah.

Jadi Anda bisa memiliki

psql_command = "\"\copy table (col1, col2) FROM file_location CSV HEADER QUOTE '\\\"' NULL ''\""
# user, hostname, password, dbname all defined elsewhere above.
command = ["psql",
    "-U", user,
    "-h", hostname,
    "-d", dbname,
    "-w", password,
    "-c", psql_command,
]

subprocess.call(command)

Lihat https://docs.python.org/2/library/ subprocess.html#subprocess.call atau https://docs.python.org/3/library/ subprocess.html#subprocess.call

edit tambahan :- Harap dicatat bahwa untuk menghindari injeksi shell, Anda harus menggunakan metode yang dijelaskan di sini. Lihat bagian peringatan https://docs.python. org/2/library/subprocess.html# frequently-used-arguments




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memperbaiki tabel TOAST yang rusak

  2. Pengumpulan aneh dengan postgresql

  3. Membuat salinan database di PostgreSQL

  4. Urutan PostgreSQL yang memastikan ID unik

  5. Bagaimana cara membuat bidang ARRAY dengan batasan kunci asing di SQLAlchemy?