PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak używać funkcji INSERT...ON CONFLICT (UPSERT) w PostgreSQL z flask_sqlalchemy?

Okazuje się, że możesz wykonać instrukcję niższego poziomu na db.session . Więc rozwiązanie wygląda mniej więcej tak:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.dialects.postgresql import insert as pg_insert

app = Flask(__name__)
db = SQLAlchemy(app)

class MyTable(db.Model):
    id = db.Column(UUID, primary_key=True)
    data = db.Column(db.String)

    def __init__(self, _id, *args, **kwargs):
        self.id = _id
        self.data = kwargs['data']

    def as_dict(self):
        return {'id': self.id, 'data': self.data}

    def props_dict(self):
        d = self.as_dict()
        d.pop('id')
        return d

relation = MyTable(id=1, data='foo')
statement = pg_insert(MyTable)\.
    values(**relation.as_dict()).\
    on_conflict_do_update(constraint='id',
                          set_=relation.props_dict())

db.session.execute(statement)
db.session.commit()

as_dict() i props_dict() Metody w mojej klasie modelu pozwalają mi użyć konstruktora do odfiltrowania niechcianych właściwości z przychodzącego żądania HTTP.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy można uzyskać historię zapytań wykonanych w postgresie?

  2. Tworzenie oddzielnego źródła danych dla mojej sesji wiosennej przy użyciu JDBC i wiosennych danych jpa w spring boot

  3. PostgreSQL wiersz do kolumn

  4. Zapytanie Postgres jest bardzo wolne z current_date::date zamiast zakodowanej na stałe daty

  5. PostgreSQL:składnia lewego sprzężenia zewnętrznego