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

Bagaimana cara menulis bingkai data ke tabel Postgres tanpa menggunakan mesin SQLAlchemy?

Anda dapat menggunakan koneksi tersebut dan menghindari SQLAlchemy. Ini akan terdengar agak tidak intuitif, tetapi akan jauh lebih cepat daripada penyisipan biasa (bahkan jika Anda menghapus ORM dan membuat kueri umum, misalnya dengan executemany ). Sisipan lambat, bahkan dengan kueri mentah, tetapi Anda akan melihat COPY disebutkan beberapa kali dalam Cara mempercepat kinerja penyisipan di PostgreSQL . Dalam hal ini, motivasi saya untuk pendekatan di bawah ini adalah:

  1. Gunakan COPY bukannya INSERT
  2. Jangan percaya Panda untuk menghasilkan SQL yang benar untuk operasi ini (walaupun, seperti yang dicatat oleh Ilja Everilä, pendekatan ini sebenarnya mendapatkan ditambahkan ke Panda di V0.24 )
  3. Jangan menulis data ke disk untuk membuat objek file yang sebenarnya; simpan semuanya dalam ingatan

Pendekatan yang disarankan menggunakan 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()

Ini seharusnya lebih cepat daripada melakukan penyisipan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jalankan Query berdasarkan JSON yang disimpan di dalam kolom

  2. Cari di atas jenis Postgres JSON bersarang / multi-level menggunakan Rekaman Aktif

  3. Objek Besar sialan itu

  4. Di NodeJS bagaimana cara menyimpan objek JSON sebagai teks dengan modul node-postgres?

  5. Ukuran indeks PostgreSQL dan nomor nilai