Sqlalchemy-core-using-update-expression

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

UPDATE式の使用

ターゲットテーブルオブジェクトの* update()*メソッドは、同等のUPDATE SQL式を構築します。

table.update().where(conditions).values(SET expressions)

結果の更新オブジェクトの* values()*メソッドは、UPDATEのSET条件を指定するために使用されます。 Noneのままにすると、SET条件は、ステートメントの実行またはコンパイル中にステートメントに渡されるパラメーターから決定されます。

where句は、UPDATEステートメントのWHERE条件を記述するオプション式です。

次のコードスニペットは、学生テーブルの「姓」列の値を「カンナ」から「カプーア」に変更します-

stmt = students.update().where(students.c.lastname == 'Khanna').values(lastname = 'Kapoor')

stmtオブジェクトはに変換する更新オブジェクトです-

'UPDATE students SET lastname = :lastname WHERE students.lastname = :lastname_1'
  • execute()メソッドが呼び出されると、バインドされたパラメーター *lastname_1 が置換されます。 完全な更新コードは以下のとおりです-
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
engine = create_engine('sqlite:///college.db', echo = True)
meta = MetaData()

students = Table(
   'students',
   meta,
   Column('id', Integer, primary_key = True),
   Column('name', String),
   Column('lastname', String),
)

conn = engine.connect()
stmt=students.update().where(students.c.lastname=='Khanna').values(lastname='Kapoor')
conn.execute(stmt)
s = students.select()
conn.execute(s).fetchall()

上記のコードは、次の出力を表示します。2行目には、指定されたスクリーンショットのように更新操作の効果が示されています-

[
   (1, 'Ravi', 'Kapoor'),
   (2, 'Rajiv', 'Kapoor'),
   (3, 'Komal', 'Bhandari'),
   (4, 'Abdul', 'Sattar'),
   (5, 'Priya', 'Rajhans')
]

更新操作

以下に示すように、sqlalchemy.sql.expressionモジュールで* update()*関数を使用しても、同様の機能を実現できることに注意してください-

from sqlalchemy.sql.expression import update
stmt = update(students).where(students.c.lastname == 'Khanna').values(lastname = 'Kapoor')