PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách sử dụng tính năng INSERT ... ON CONFLICT (UPSERT) của PostgreSQL với flask_sqlalchemy?

Hóa ra bạn có thể thực thi một câu lệnh cấp thấp hơn trên db.session . Vì vậy, một giải pháp trông giống như sau:

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()props_dict() các phương thức trong lớp mô hình của tôi cho phép tôi sử dụng hàm tạo để lọc ra các thuộc tính không mong muốn từ yêu cầu HTTP đến.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giá trị cột tăng dần theo điều kiện nhất định trong truy vấn SQL trên Postgresql

  2. Bỏ kết hợp nhiều mảng song song

  3. Hành tinh PostgreSQL trong Thiên hà Ansible

  4. Làm cách nào để truyền tham số vào một hàm postgre và lấy dữ liệu bằng ExecuteReader?

  5. Hàm plpgsql trả về nhiều cột được gọi nhiều lần