fastapi将sqlalchemy结果转为dict

1、将sqlalchemy查询结果转为dict

class UserModel(Base):
    __tablename__ = "user"
    id = Column(Integer, primary_key=True, index=True)
    nickname = Column(String(32), unique=True, index=True)
    token = Column(String(32))
    status = Column(Boolean, default=True, comment='是否显示: 0=否, 1=是')
    sex = Column(Integer, default=0, comment='性别: 0=男, 1=女')

#单条数据和多条都可以
def to_dict(result):
    if type(result).__name__ == 'list':
        return [{key: getattr(row, key) for key in row.__table__.columns.keys()} for row in result]
    else:
        return {key: getattr(result, key) for key in result.__table__.columns.keys()}

@router.get("/user/{id}")
async def getuser(id: int):
    users = db.query(UserModel).filter(UserModel.id==id).first()
    return {"data":to_dict(users)}

2、手动将sqlalchemy查询结果转为BaseModel

class UserModel(Base):
    __tablename__ = "user"
    id = Column(Integer, primary_key=True, index=True)
    nickname = Column(String(32), unique=True, index=True)
    token = Column(String(32))
    status = Column(Boolean, default=True, comment='是否显示: 0=否, 1=是')
    sex = Column(Integer, default=0, comment='性别: 0=男, 1=女')

class UserOut(BaseModel):
    wx_account_id: int
    nickname: str
    status: bool

    class Config:
        from_attributes = True  # 允许从 ORM 模型(网上大多例子是orm_mode=True,最新版本使用from_attributes)

@router.get("/user/{id}")
async def getuser(id: int):
    users = db.query(UserModel).filter(UserModel.id==id).first()
    return {"data":UserOut.model_validate(users)} #新版请使用model_validate,from_orm已废弃

    #转换多条数据
    #{"data":[UserOut.model_validate(user) for user in users]}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值