You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重构Python中PUT请求的None检查后多属性赋值代码?

简化PUT请求中的属性赋值逻辑

你当前的代码重复了大量「检查属性非None再赋值」的冗余逻辑,完全可以通过以下几种方式简化:

方法一:遍历指定属性列表

直接列出需要同步的属性名,循环处理赋值逻辑:

def books_put(db: Session, db_book: schemas.Book, book: schemas.BookPut):
    # 列出需要更新的属性名称
    update_fields = ["name", "pages", "author", "genre", "publishing_house"]
    for field in update_fields:
        field_value = getattr(book, field)
        if field_value is not None:
            setattr(db_book, field, field_value)

方法二:利用Pydantic模型特性(推荐)

如果你的schemas.BookPut是Pydantic的BaseModel子类,可以直接通过模型自带的方法提取非None属性,批量赋值:

def books_put(db: Session, db_book: schemas.Book, book: schemas.BookPut):
    # 获取所有值不为None的属性键值对
    update_data = book.dict(exclude_none=True)
    # 批量更新db_book的属性
    for key, value in update_data.items():
        setattr(db_book, key, value)

这种方式的优势是后续BookPut新增属性时,无需修改这段赋值代码,自动适配新字段。

方法三:直接通过SQLAlchemy更新数据库(若适用)

如果db_book是SQLAlchemy的ORM实例,还可以直接用ORM的update方法批量更新数据库:

def books_put(db: Session, db_book: schemas.Book, book: schemas.BookPut):
    update_data = book.dict(exclude_none=True)
    db.query(schemas.Book).filter_by(id=db_book.id).update(update_data)
    db.commit()

这种方式跳过内存中实例的修改,直接操作数据库,适合不需要先修改实例再做其他处理的场景。

内容的提问来源于stack exchange,提问作者X HOxha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 14:25:17