sql >> Database >  >> RDS >> PostgreSQL

Hoe panda's te gebruiken om upsert te doen in SqlAlchemy

De set_ parameter verwacht een toewijzing met kolomnamen als sleutels en expressies of letterlijke waarden als waarden , maar u geeft een toewijzing door met geneste woordenboeken als waarden, d.w.z. df.to_dict(orient='dict') . De fout "kan het type 'dict' niet aanpassen" is het resultaat van het doorgeven van die woordenboeken door SQLAlchemy aan Psycopg2 als "literals".

Omdat u meerdere rijen in een enkele INSERT probeert in te voegen met behulp van de VALUES-clausule, moet u excluded in de SET-acties. EXCLUDED is een speciale tabel die de rijen vertegenwoordigt die bedoeld zijn om in te voegen.

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. Hoe duplicaten te verwijderen zodat er alleen paren in een tabel voorkomen?

  2. MySQL - Hoe BESTELLEN OP RELEVANTIE? INNODB-tabel

  3. Hoe kan ik geselecteerde rijen bijwerken met waarden uit een CSV-bestand in Postgres?

  4. Mysql veel op veel relatiequery. Hoe krijg ik alle tags van gefilterde berichten?