SQLAlchemyでのupdate
May 20, 2015 · 1 minute read memopythonSQLAlchemyFlaskweb概要
ノイズのあるdictionary
データからSQLAlchemyを使って簡単にupdateしたい。
フォームからデータを受け取るとModelに必要のないデータも含まれてしまうことがある。
そういったものをいちいち指定せずによしなにupdateを行えるようにする。
通常のupdateの方法
通常のupdateは次のような感じ。
stmt = Users.update().\
where(Users.id==5).\
values(name='user #5')
もしくは
user = Users.query.filter_by(id=5).first()
user.name="hoge"
db.session.commit()
今回の方法
setattr(obj, key, value)
を使っていく。
class Users(db.Model):
id = db.Column(db.Integer, primarykey=True)
name = db.Column(db.String(100), nullable=False, unique=True)
password = db.Column(db.String(100), nullable=False)
def __init__(self, id, name, password):
self.id = user_id
self.name = name
self.password = password
def update_dict(dict):
for name, value in dict.items():
if name in self.__dict__:
setattr(self, name, value)
# 更新操作
dict = {"name"; hoge, "password":fuga}
user=Users.query.filter_by(id=5).first()
user.update_form(dict)
db.session.commit()
こんな感じのupdate_dict
をモデルに実装すると、
dictionary
を無造作に入れても、定義されている値のみが変更され、
データの更新が行われるので楽。
フォームをモデルに合うように作るだけで、データの追加更新を簡単に実装できるようになる。