如何用python di更新sqlalchemy orm对象

2024-10-03 06:31:51 发布

您现在位置: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"}更新


Tags: 对象nameidbasestringsqlalchemycolumnattrs
3条回答

可以使用setattr()动态更新现有SQLAlchemy对象的属性:

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

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

根据您的用例(如果您不需要验证或推断模型中的任何内容),您可以通过使用filter_byid来保存一个DB调用以获取特定行,并像最初需要的那样使用字典来更新它。

user_query = session.query(User).filter_by(id=someid)
data_to_update = dict(name="marchel", fullname="richie marchel")

user_query.update(data_to_update)

根据会话的类型(如果使用scoped_session),您可能还需要将synchronize_session=False关键字参数添加到update调用中:

user_query.update(data_to_update, synchronize_session=False)

我有另一个解决办法。将模型方法定义为以下内容会很方便。

class ModelName(db.Model):
    """
    docstring here
    """
    ...

    def update(self, **kwargs):
        for key, value in kwargs.items():
            if hasattr(self, key):
                setattr(self, key, value)

我希望它能解决你的问题。

谢谢你

相关问题 更多 >