Ответ 1
Вы можете использовать setattr()
для динамического обновления атрибутов существующего объекта SQLAlchemy:
user = session.query(User).get(someid)
for key, value in yourdict.iteritems():
setattr(user, key, value)
имена ключей ключа являются сопоставлением с объектом sqlalchemy attrs
Пример:
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
password = Column(String)
может обновляться с id = 3, {name: "diana"}
или id = 15, {name: "marchel", fullname: "richie marchel"}
Вы можете использовать setattr()
для динамического обновления атрибутов существующего объекта SQLAlchemy:
user = session.query(User).get(someid)
for key, value in yourdict.iteritems():
setattr(user, key, value)
база по ответу @martijn-pieters,
вы можете не только динамический столбец обновления с setattr
, но также можете использовать динамическую таблицу и столбец в сочетании с getattr
и setattr
Пример:
# models.py
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
password = Column(String)
# update.py
import models
def dynamic_update(dynamic_table, col_id, dynamic_cols):
"""
dynamic_table: name of the table, "User" for example
col_id: id of which column you want to update
dynamic_cols: key value pairs {name: "diana"}
"""
if hasattr(models, dynamic_table):
table = getattr(models, dynamic_table)
col_info = table.query.filter_by(id=col_id).first()
for (key, value) in dynamic_cols.items():
if hasattr(table, key):
setattr(col_info, key, value)
session.commit()
Кстати, вы можете получить более подробную информацию о setattr
, getattr
, hasattr
от питонского официального документа
https://docs.python.org/2/library/functions.html#setattr