在使用fastapi-pagination分页功能时遇到的问题,异步调用时,当有多个表联合查询时只返回了一个表的字段。
查看源码,在/fastapi_pagination/ext/async_sqlalchemy.py 中发现这句
return create_page(items.scalars().unique().all(), total, params)
因为scalars()默认只返回对象元组中的第1个对象,所以造成上述情况
解决办法:
将该句改为 return create_page(items.unique().all(), total, params)
但多表联合查询时,如果select中包含了对象时,该方法的返回会有对象的字典嵌套,需要写个函数/方法 解决嵌套
如select(User, Org).where(...).join(...), 返回为
[
{
User:{ 字段1: 值1, 字段2: 值2 },
Org:{ 字段1: 值1, 字段2: 值2 }
},
{
User:{ 字段1: 值1, 字段2: 值2 },
Org:{ 字段1: 值1, 字段2: 值2 }
}
]
如select(User, Org.org_name, Org.legal_person).where(...).join(...), 返回为
[
{
User:{ 字段1: 值1, 字段2: 值2 },
Org.org_name: 值,
Org.legal_person: 值
},
{
User:{ 字段1: 值1, 字段2: 值2 },
Org.org_name: 值,
Org.legal_person: 值
}
]
花了不少时间来解决,希望本文能帮助使用fastapi-pagination的小伙伴们