sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLのINSERT...ON CONFLICT(UPSERT)機能をflask_sqlalchemyで使用するにはどうすればよいですか?

    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リクエストから不要なプロパティを除外できます。



    1. SQLを介した組み合わせの列挙

    2. 実行中のSQLServerインスタンスのサーバーレベルの照合を変更する方法

    3. 複数のテーブルを使用してHibernateでツリー構造をレンダリングするにはどうすればよいですか?

    4. LaravelのGoogleCloudAppEngineに接続されたMySQLに画像をアップロードできません