今回は SQLAlchemy で Update のやり方を書きます。
動作環境
- Mac OS X 10.11.5
- Python 3.5.1
- MySQL Ver 14.14 Distrib 5.7.11, for osx10.11 (x86_64) using EditLine wrapper
- SQLAlchemy 1.1.0
- PyMySQL 0.7.4
サンプルコード
id==2(name="杉野 誠一", kana='すぎの せいいち') のレコードを更新します。
sqlalchemy_update.py
# -*- coding:utf-8 -*-
import sqlalchemy
import sqlalchemy.orm
import sqlalchemy.ext.declarative
Base = sqlalchemy.ext.declarative.declarative_base()
class Student(Base):
__tablename__ = 'students'
id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
name = sqlalchemy.Column(sqlalchemy.String(20))
kana = sqlalchemy.Column(sqlalchemy.String(40))
def main():
url = 'mysql+pymysql://root:@localhost/test_db?charset=utf8'
engine = sqlalchemy.create_engine(url, echo=True)
# セッションを作成
Session = sqlalchemy.orm.sessionmaker(bind=engine)
session = Session()
# 全データ削除
session.query(Student).delete()
# 複数データを一括登録
session.add_all([
Student(id=1, name='石坂 優', kana='いしざか ゆう'),
Student(id=2, name='杉野 誠一', kana='すぎの せいいち'),
Student(id=3, name='桑田 結子', kana='くわた ゆうこ'),
Student(id=4, name='栗原 愛', kana='くりはら あい'),
])
# id==2 のデータを更新
student = session.query(Student).filter(Student.id==2).first()
student.name = '佐久間 仁'
student.kana = 'さくま じん'
# テーブルの全データを出力
print_all_students(session)
# データを確定
session.commit()
# テーブルの全データを出力する関数
def print_all_students(session):
students = session.query(Student).all()
for student in students:
print('%d, %s %s' % (student.id, student.name, student.kana))
if __name__ == '__main__':
main()
まとめ
Update に関しては特筆すべきことはありません。
あえて言うなら update メソッドはなくて、Session から取得したオブジェクトを直接操作するということぐらいでしょうか。
わざわざ記事にすることもなかったかもしれませんが、Delete と Alter について書いたので、おまけとして残しておきます。