Python:如果不是 None 则更新属性值

Sho*_*nin 5 python null attributes sqlalchemy

如果属性不等于 None,我想更新 SQLAlchemy DB 中的列值。

此方法有效,但似乎不遵循 DRY 原则

def editObject(object_id, name, picture, metaTitle, 
    metaKeywords, metaDescription):

    object = session.query(Object).filter_by(id = object_id).one()

    if name:
        object.name = name
    if picture:
        object.picture = picture
    if metaTitle:
        object.metaTitle = metaTitle
    if metaKeywords:
        object.metaKeywords = metaKeywords
    if metaDescription:
        object.metaDescription = metaDescription

    session.add(object)
    session.commit()
Run Code Online (Sandbox Code Playgroud)

谢谢

r-m*_*m-n 3

您可以使用关键字参数和setattr()

def editObject(object_id, **kwargs):

    object = session.query(Object).filter_by(id = object_id).one()

    for attr, value in kwargs.iteritems():
        if value:
            setattr(object, attr, value)

    session.add(object)
    session.commit()
Run Code Online (Sandbox Code Playgroud)