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

Bagaimana cara menggunakan fitur INSERT...ON CONFLICT (UPSERT) PostgreSQL dengan flask_sqlalchemy?

Ternyata Anda dapat mengeksekusi pernyataan tingkat rendah di db.session . Jadi solusinya terlihat seperti ini:

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() dan props_dict() metode di kelas model saya memungkinkan saya untuk menggunakan konstruktor untuk menyaring properti yang tidak diinginkan dari permintaan HTTP yang masuk.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Goroutine memblokir kumpulan koneksi

  2. psycopg2 - Koneksi Tanpa Kunci

  3. String Koneksi PostgreSQL dengan driver ODBC di C#, Kata kunci tidak didukung:driver

  4. Persyaratan kunci utama dalam SQL mentah memperumit kueri di Django

  5. Bagaimana saya bisa menggunakan kursor sisi server dengan Django dan psycopg2?