LoginSignup
24
18

More than 5 years have passed since last update.

SQLAlchemy で Update するには?

Posted at

今回は SQLAlchemyUpdate のやり方を書きます。

動作環境

  • 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 について書いたので、おまけとして残しておきます。

SQLAlchemy で Delete するには?
SQLAlchemy で Alter するには?

24
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
18