यह पता चला है कि आप db.session
. पर निचले स्तर के स्टेटमेंट को निष्पादित कर सकते हैं . तो समाधान कुछ इस तरह दिखता है:
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()
मेरे मॉडल वर्ग में विधियां मुझे आने वाले HTTP अनुरोध से अवांछित गुणों को फ़िल्टर करने के लिए कन्स्ट्रक्टर का उपयोग करने की अनुमति देती हैं।