PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да напиша рамка с данни в таблицата на Postgres, без да използвам SQLAlchemy двигател?

Можете да използвате тези връзки и да избегнете SQLAlchemy. Това ще звучи доста неинтуитивно, но ще бъде много по-бързо от обикновените вмъквания (дори ако трябва да изпуснете ORM и да направите обща заявка, напр. с executemany ). Вмъкванията са бавни, дори и при необработени заявки, но ще видите, че COPY се споменава няколко пъти в Как да ускоря производителност на вмъкване в PostgreSQL . В този случай моите мотиви за подхода по-долу са:

  1. Използвайте COPY вместо INSERT
  2. Не се доверявайте на Pandas за генериране на правилния SQL за тази операция (въпреки че, както е отбелязано от Ilja Everilä, този подход всъщност получи добавен към Pandas във 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. Глави в облака в CHAR(10)

  2. Защо IS NOT NULL е false при проверка на тип ред?

  3. Извличане на месеца от полето за дата

  4. Как да накарате Postgres Copy да игнорира първия ред на голям txt файл

  5. Екраниране на имена на колони, подобни на ключови думи в Postgres