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

Postgresql PADA KONFLIK di sqlalchemy

Menggunakan Postgres 9.6.1, sqlchemy 1.1.4, dan psycopg2 2.6.2:

  1. Ubah struktur data Anda menjadi kamus. Dari Panda itu

    import pandas
    from sqlalchemy import MetaData
    from sqlalchemy.dialects.postgresql import insert
    import psycopg2
    
    # The dictionary should include all the values including index values
    insrt_vals = df.to_dict(orient='records')
    
  2. Hubungkan ke database melalui sqlalchemy . Alih-alih coba driver psycog2 di bawahnya dan fungsi COPY asli, yang melewati semua pengindeksan postgres.

    csv_data = os.path.realpath('test.csv')
    con = psycopg2.connect(database = 'db01', user = 'postgres')
    cur = con.cursor()
    cur.execute("\copy stamm_data from '%s' DELIMITER ';' csv header" % csv_data)
    con.commit()
    
  3. Jalankan

    results = engine.execute(do_nothing_stmt)
    # Get number of rows inserted
    rowcount = results.rowcount
    

Peringatan:

Metode ini tidak bekerja dengan NaT keluar dari kotak.

Semuanya bersama

tst_df = pd.DataFrame({'colA':['a','b','c','a','z', 'q'],
              'colB': pd.date_range(end=datetime.datetime.now() , periods=6),
              'colC' : ['a1','b2','c3','a4','z5', 'q6']})


insrt_vals = tst_df.to_dict(orient='records')
engine =      sqlalchemy.create_engine("postgresql://user:[email protected]/postgres")
connect = engine.connect()
meta = MetaData(bind=engine)
meta.reflect(bind=engine)
table = meta.tables['tstbl']
insrt_stmnt = insert(table).values(insrt_vals)

do_nothing_stmt  = insrt_stmnt.on_conflict_do_nothing(index_elements=['colA','colB'])
results = engine.execute(do_nothing_stmt)

Alih-alih langkah 2 dan 3 , gunakan psycog2 driver dengan perintah salin di postgres lebih cepat untuk file yang lebih besar (mendekati manggung) karena ini menonaktifkan semua pengindeksan tabel.

csv_data = os.path.realpath('test.csv')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengaktifkan Postgis Query di Spark SQL

  2. Temukan pelanggan yang tidak berlangganan kembali dalam ambang batas langganan lama

  3. ver.2 PyGreSQL ERROR:from _pg import * ImportError:DLL load failed:Modul yang ditentukan tidak dapat ditemukan

  4. Dukungan SQLAlchemy dari Skema Postgres

  5. Kesalahan saat mencoba menghubungkan R ke PostgreSQL menggunakan RODBC