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

SQLAlchemy इंजन का उपयोग किए बिना पोस्टग्रेज टेबल पर डेटा फ्रेम कैसे लिखें?

आप उन कनेक्शनों का उपयोग कर सकते हैं और SQLAlchemy से बच सकते हैं। यह सुनने में अटपटा लगने वाला है, लेकिन यह नियमित इंसर्ट की तुलना में बहुत तेज़ होगा (भले ही आप ORM को छोड़ दें और एक सामान्य क्वेरी करें जैसे executemany के साथ) ) कच्चे प्रश्नों के साथ भी सम्मिलन धीमा है, लेकिन आप देखेंगे कि COPY में कई बार उल्लेख किया गया है PostgreSQL में सम्मिलन प्रदर्शन . इस उदाहरण में, नीचे दिए गए दृष्टिकोण के लिए मेरी प्रेरणाएँ हैं:

  1. COPY का उपयोग करें INSERT . के बजाय
  2. इस ऑपरेशन के लिए सही SQL उत्पन्न करने के लिए पंडों पर भरोसा न करें (हालाँकि, जैसा कि इल्जा एवरिला ने उल्लेख किया है, इस दृष्टिकोण को वास्तव में V0.24 में पंडों में जोड़ा गया )
  3. वास्तविक फ़ाइल ऑब्जेक्ट बनाने के लिए डिस्क पर डेटा न लिखें; यह सब स्मृति में रखें

cursor.copy_from() का उपयोग करके सुझाया गया तरीका :

import csv
import io
import psycopg2

df = "<your_df_here>"

# drop all the columns you don't want in the insert data here

# First take the headers
headers = df.columns

# Now get a nested list of values
data = df.values.tolist()

# Create an in-memory CSV file
string_buffer = io.StringIO()
csv_writer = csv.writer(string_buffer)
csv_writer.writerows(data)

# Reset the buffer back to the first line
string_buffer.seek(0)

# Open a connection to the db (which I think you already have available)
with psycopg2.connect(dbname=current_app.config['POSTGRES_DB'], 
                      user=current_app.config['POSTGRES_USER'],
                      password=current_app.config['POSTGRES_PW'], 
                      host=current_app.config['POSTGRES_URL']) as conn:
    c = conn.cursor()

    # Now upload the data as though it was a file
    c.copy_from(string_buffer, 'the_table_name', sep=',', columns=headers)
    conn.commit()

यह वास्तव में सम्मिलित करने की तुलना में तीव्रता का क्रम होना चाहिए।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सेकंड के आधार पर Postregsql दिनांक अंतर

  2. Postgresql में tcp_keepalives सेटिंग्स का उपयोग कैसे करें?

  3. PostgreSQL - फ्लोटिंग पॉइंट नंबरों को गोल करना

  4. पोस्टग्रेज:प्रत्येक सरणी तत्व को संशोधित करें

  5. जन्म तिथि दिए गए अगले जन्मदिन की गणना कैसे करें?