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]}