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

Cara menggunakan panda untuk melakukan upsert di SqlAlchemy

set_ parameter mengharapkan pemetaan dengan nama kolom sebagai kunci dan ekspresi atau literal sebagai nilai , tetapi Anda meneruskan pemetaan dengan kamus bersarang sebagai nilai, yaitu df.to_dict(orient='dict') . Kesalahan "tidak dapat mengadaptasi tipe 'dict'" adalah hasil dari SQLAlchemy yang meneruskan kamus tersebut ke Psycopg2 sebagai "literal".

Karena Anda mencoba menyisipkan beberapa baris dalam satu INSERT menggunakan klausa VALUES, Anda harus menggunakan excluded dalam tindakan SET. DIKECUALIKAN adalah tabel khusus yang mewakili baris yang dimaksudkan untuk disisipkan.

insert_statement = postgresql.insert(my_table).values(df.to_dict(orient='records'))
upsert_statement = insert_statement.on_conflict_do_update(
    index_elements=['id'],
    set_={c.key: c for c in insert_statement.excluded if c.key != 'id'})
conn.execute(upsert_statement)



  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 bermigrasi dari SQLite ke PostgreSQL (Rails)

  2. Menyimpan properti dinamis objek dalam SQL

  3. PostgreSQL:isi nilai NULL dalam kueri rangkaian waktu dengan nilai sebelumnya

  4. Beberapa Basis Data Dengan Rel Tidak Berfungsi Untuk Basis Data Jarak Jauh

  5. Mengambil file dari byte di PostgreSQL menggunakan java