Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 有没有更好的方法来服务和编码来自FastAPI的大型SQLAlchemy数据集?_Json_Api_Sqlalchemy_Fastapi_Pydantic - Fatal编程技术网

Json 有没有更好的方法来服务和编码来自FastAPI的大型SQLAlchemy数据集?

Json 有没有更好的方法来服务和编码来自FastAPI的大型SQLAlchemy数据集?,json,api,sqlalchemy,fastapi,pydantic,Json,Api,Sqlalchemy,Fastapi,Pydantic,我想使用FastAPIStreamingResponse返回一个大数据集,在存储库/逻辑层中,在完成查询工作后,我以以下方式返回数据: 查询中的记录的。每个产量(数据记录限制): 收益率记录。至_实体() 我最初遇到一些编码问题(编码器方法丢失,无法序列化日期时间等),正是由于这些问题,我最终在web处理程序中得到了以下代码: 。。。 结果=获取数据() def_编码的_结果(): 收益率“[” 对于idx,枚举中的项(结果): 如果idx>0: 收益率“ 产生json.dumps(JSU编码

我想使用FastAPI
StreamingResponse
返回一个大数据集,在存储库/逻辑层中,在完成查询工作后,我以以下方式返回数据:

查询中的记录的
。每个产量(数据记录限制):
收益率记录。至_实体()
我最初遇到一些编码问题(编码器方法丢失,无法序列化日期时间等),正是由于这些问题,我最终在web处理程序中得到了以下代码:

。。。
结果=获取数据()
def_编码的_结果():
收益率“[”
对于idx,枚举中的项(结果):
如果idx>0:
收益率“
产生json.dumps(JSU编码器(item.dict())
收益率“]”
返回StreamingResponse(\u编码的\u结果())
现在。。。在您提问之前:是的,它可以工作,但我想知道这一切是否都是必要的,或者是否有更好的方法可以做到这一点。要添加更多上下文,第一个代码段中的记录是一个SQLAlchemy模型实例,而
.To_entity()
将其转换为Pydantic数据实例。在第二个代码片段中,我对pydantic类调用了
.dict()
,因此我得到了一个Python
dict
,它可以在被
.json.dumps(…)
之前通过
JSU编码器

我敢肯定,我不是唯一一个尝试使用FastAPI返回/传输非常大的数据集的人,所以我想知道是否有内置的或更好的方法来实现这一点。谢谢


注意:我主要关心的是(如果我不清楚的话)给定一个Pydantic实体,我需要首先调用
.dict()
方法,然后它需要通过
jsonable\u编码器
最后通过
json.dumps
。我希望这个转换是在FastAPI内部的某个地方实现的,并且隐藏在web处理程序中。TL/DR
\u编码的\u结果
应该是不需要的。

我想问题是因为您试图流式传输JSON,所以无法从FastAPI提供的所有好处中获益。您不需要调用
.dict()
jsu编码器
能够解析Pydantic模型,假设单个项是模型。通常的工作流程是使用
response\u model
参数声明响应模型,FastAPI将进行解析、验证等。您可以流式传输字节或文本,然后在客户端处理数据,但不确定在您的情况下此选项是否可行。