Sqlalchemy-orm-updating-objects
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のテーブルビューには反映されません。 セッションをコミットするときにのみ更新されます。