sql >> Databáze >  >> RDS >> PostgreSQL

Jak používat pandy k upsert v SqlAlchemy

set_ parametr očekává mapování s názvy sloupců jako klíče a výrazy nebo literály jako hodnoty , ale předáváte mapování s vnořenými slovníky jako hodnotami, tj. df.to_dict(orient='dict') . Chyba „nelze přizpůsobit typ 'dict'“ je výsledkem toho, že SQLAlchemy předala tyto slovníky Psycopg2 jako „literály“.

Protože se pokoušíte vložit více řádků do jednoho INSERT pomocí klauzule VALUES, měli byste použít excluded v akcích SET. EXCLUDED je speciální tabulka představující řádky, které mají být vloženy.

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. Spojte dvě tabulky s kategoriemi v dotazu, který načte kategorie a jejich rodiče

  2. Jak odstranit podivnou tabulku s názvem BIN$c+eOnMB3RbKSEfg/rsxtAQ==$0 z databáze Oracle?

  3. Seskupení dotazů MySql podle času

  4. Proč MySQL nepoužívá optimální indexy