PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

पायथन psql \ CSV को दूरस्थ सर्वर पर कॉपी करें

shell=True . का उपयोग न करने का प्रयास करें अगर आप इससे बच सकते हैं। श की मदद करने के लिए अपने आप को कमांड को टोकनाइज़ करना बेहतर है।

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

इस मामले में तब आपका कॉपी स्टेटमेंट ऐसा हो सकता है जैसे इसे psql शब्दशः पास किया जाता है, क्योंकि कोई शेल नहीं है। ध्यान में रखने के लिए मुद्दों का हवाला देते हुए। (N.B. को अभी भी इसे अजगर के लिए उद्धृत करना है, इसलिए स्ट्रिंग यथावत रहेगी)।

यदि आप अभी भी shell=True . का उपयोग करना चाहते हैं तो आपको दोनों अजगर और . के लिए स्ट्रिंग अक्षर से बचना होगा खोल

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

अजगर में एक स्ट्रिंग बनाएगा जो होगा

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

हमें पता चला कि हमें अपने खोल पर सबसे पहले क्या चाहिए!

संपादित करें (टिप्पणियों से कुछ स्पष्ट करते हुए):

subprocess.call , जब shell=True . का उपयोग नहीं कर रहे हों , तर्कों का एक पुनरावृत्त लेता है।

तो आप कर सकते थे

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)

देखें https://docs.python.org/2/library/ subprocess.html#subprocess.call या https://docs.python.org/3/library/ subprocess.html#subprocess.call

अतिरिक्त संपादन :- कृपया ध्यान दें कि शेल इंजेक्शन से बचने के लिए आपको यहां वर्णित विधि का उपयोग करना चाहिए। https://docs.python का चेतावनी अनुभाग देखें। org/2/library/subprocess.html#अक्सर-यूज्ड-आर्ग्यूमेंट्स




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. बैकएंड डेटाबेस एसिंक्रोनस रूप से बदलते समय जेपीए इकाइयों को रीफ्रेश कैसे करें?

  2. PostgreSQL:OID से Bytea तक

  3. मेरी पहली पंक्ति व्यवस्थापक के लिए क्वेरी कभी न हटाएं

  4. PostgreSQL में Django इंडेक्स ऑटोफिल्ड/आईडी कुंजी करता है?

  5. टाइपप्रति से पोस्टग्रेज से कनेक्शन हैंग हो जाता है