Sqlalchemy-orm-updating-objects

提供:Dev Guides
移動先:案内検索

SQLAlchemy ORM-オブジェクトの更新

この章では、目的の値でテーブルを変更または更新する方法を説明します。

オブジェクトの特定の属性のデータを変更するには、それに新しい値を割り当て、変更をコミットして変更を永続化する必要があります。

ID = 2のCustomersテーブルで、主キー識別子を持つテーブルからオブジェクトを取得しましょう。 次のようにセッションのget()メソッドを使用できます-

x = session.query(Customers).get(2)

以下のコードで選択したオブジェクトの内容を表示できます-

print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)

私たちの顧客テーブルから、次の出力が表示されるはずです-

Name: Komal Pande Address: Koti, Hyderabad Email: [email protected]

次に、以下に示すように新しい値を割り当てることにより、アドレスフィールドを更新する必要があります-

x.address = 'Banjara Hills Secunderabad'
session.commit()

変更はデータベースに永続的に反映されます。 次のように first()method を使用して、テーブルの最初の行に対応するオブジェクトを取得します-

x = session.query(Customers).first()

これは、次のSQL式を実行します-

SELECT customers.id
AS customers_id, customers.name
AS customers_name, customers.address
AS customers_address, customers.email
AS customers_email
FROM customers
LIMIT ? OFFSET ?

バインドされたパラメーターは、それぞれLIMIT = 1およびOFFSET = 0になり、最初の行が選択されることを意味します。

print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)

さて、最初の行を表示する上記のコードの出力は次のとおりです-

Name: Ravi Kumar Address: Station Road Nanded Email: [email protected]

今名前属性を変更し、以下のコードを使用して内容を表示します-

x.name = 'Ravi Shrivastava'
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)

上記のコードの出力は-

Name: Ravi Shrivastava Address: Station Road Nanded Email: [email protected]

変更が表示されても、コミットされません。 以下のコードで rollback()method を使用すると、以前の永続的な位置を保持できます。

session.rollback()

print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)

最初のレコードの元の内容が表示されます。

一括更新の場合、Queryオブジェクトのupdate()メソッドを使用します。 各行の名前に「Mr.」というプレフィックスを付けてみましょう(ID = 2を除く)。 対応するupdate()ステートメントは次のとおりです-

session.query(Customers).filter(Customers.id! = 2).
update({Customers.name:"Mr."+Customers.name}, synchronize_session = False)
  • update()メソッドには、次の2つのパラメーターが必要です-*
  • キーが更新される属性であり、値が属性の新しいコンテンツであるキー値の辞書。
  • セッションの属性を更新する戦略を示すsynchronize_session属性。 有効な値はfalseです。セッションを同期しない場合、フェッチ:更新の前に選択クエリを実行して、更新クエリと一致するオブジェクトを見つけます。そして評価:セッション内のオブジェクトの基準を評価します。

テーブルの4行のうち3行には「Mr.」というプレフィックスが付いていますが、変更はコミットされないため、SQLiteStudioのテーブルビューには反映されません。 セッションをコミットするときにのみ更新されます。