Как обновить объект orlChalchemy orm с помощью python dict

имена ключей ключа являются сопоставлением с объектом 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"}

Ответ 1

Вы можете использовать setattr() для динамического обновления атрибутов существующего объекта SQLAlchemy:

user = session.query(User).get(someid)

for key, value in yourdict.iteritems():
    setattr(user, key, value)

Ответ 2

база по ответу @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

https://docs.python.org/2/library/functions.html#getattr

https://docs.python.org/2/library/functions.html#hasattr