SQLAlchemyORM-オブジェクトの更新
この章では、テーブルを必要な値で変更または更新する方法を説明します。
オブジェクトの特定の属性のデータを変更するには、それに新しい値を割り当て、変更をコミットして変更を永続化する必要があります。
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]
次に、以下のように新しい値を割り当てて、Addressフィールドを更新する必要があります-
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)
The update() method requires two parameters as follows −
キーが更新される属性であり、値が属性の新しい内容であるキー値のディクショナリ。
セッション内の属性を更新するための戦略に言及しているsynchronize_session属性。有効な値はfalseです。セッションを同期しない場合、fetch:更新の前にselectクエリを実行して、更新クエリと一致するオブジェクトを検索します。および評価:セッション内のオブジェクトの基準を評価します。
表の4行のうち3行には、名前の前に「Mr.」が付いています。ただし、変更はコミットされないため、SQLiteStudioのテーブルビューには反映されません。セッションをコミットしたときにのみ更新されます。