Sqlalchemy-orm-updating-objects
SQLAlchemy ORM-オブジェクトの更新
この章では、目的の値でテーブルを変更または更新する方法を説明します。
オブジェクトの特定の属性のデータを変更するには、それに新しい値を割り当て、変更をコミットして変更を永続化する必要があります。
ID = 2のCustomersテーブルで、主キー識別子を持つテーブルからオブジェクトを取得しましょう。 次のようにセッションのget()メソッドを使用できます-
以下のコードで選択したオブジェクトの内容を表示できます-
私たちの顧客テーブルから、次の出力が表示されるはずです-
次に、以下に示すように新しい値を割り当てることにより、アドレスフィールドを更新する必要があります-
変更はデータベースに永続的に反映されます。 次のように first()method を使用して、テーブルの最初の行に対応するオブジェクトを取得します-
これは、次のSQL式を実行します-
バインドされたパラメーターは、それぞれLIMIT = 1およびOFFSET = 0になり、最初の行が選択されることを意味します。
さて、最初の行を表示する上記のコードの出力は次のとおりです-
今名前属性を変更し、以下のコードを使用して内容を表示します-
上記のコードの出力は-
変更が表示されても、コミットされません。 以下のコードで rollback()method を使用すると、以前の永続的な位置を保持できます。
最初のレコードの元の内容が表示されます。
一括更新の場合、Queryオブジェクトのupdate()メソッドを使用します。 各行の名前に「Mr.」というプレフィックスを付けてみましょう(ID = 2を除く)。 対応するupdate()ステートメントは次のとおりです-
- update()メソッドには、次の2つのパラメーターが必要です-*
- キーが更新される属性であり、値が属性の新しいコンテンツであるキー値の辞書。
- セッションの属性を更新する戦略を示すsynchronize_session属性。 有効な値はfalseです。セッションを同期しない場合、フェッチ:更新の前に選択クエリを実行して、更新クエリと一致するオブジェクトを見つけます。そして評価:セッション内のオブジェクトの基準を評価します。
テーブルの4行のうち3行には「Mr.」というプレフィックスが付いていますが、変更はコミットされないため、SQLiteStudioのテーブルビューには反映されません。 セッションをコミットするときにのみ更新されます。