相关疑难解决方法(0)

如何克服"datetime.datetime而不是JSON可序列化"?

我有一个基本的词典如下:

sample = {}
sample['title'] = "String"
sample['somedate'] = somedatetimehere
Run Code Online (Sandbox Code Playgroud)

当我尝试做的时候,jsonify(sample)我得到:

TypeError: datetime.datetime(2012, 8, 8, 21, 46, 24, 862000) is not JSON serializable

我能做些什么,以便我的字典样本可以克服上述错误?

注意:虽然它可能不相关,但字典是从mongodb中检索记录生成的,当我打印输出时str(sample['somedate']),输出是2012-08-08 21:46:24.862000.

python json

626
推荐指数
19
解决办法
44万
查看次数

如何使用 FastAPI 返回 JSON 格式的 csv 文件/Pandas DataFrame?

我有一个.csv文件想要在 FastAPI 应用程序中呈现。我只设法.csv以 JSON 格式呈现文件,如下所示:

def transform_question_format(csv_file_name):

    json_file_name = f"{csv_file_name[:-4]}.json"

    # transforms the csv file into json file
    pd.read_csv(csv_file_name ,sep=",").to_json(json_file_name)

    with open(json_file_name, "r") as f:
        json_data = json.load(f)

    return json_data

@app.get("/questions")
def load_questions():

    question_json = transform_question_format(question_csv_filename)

    return question_json
Run Code Online (Sandbox Code Playgroud)

当我尝试直接返回时pd.read_csv(csv_file_name ,sep=",").to_json(json_file_name),它起作用了,因为它返回一个字符串。

我应该如何进行?我相信这不是一个好方法。

python csv dataframe pandas fastapi

12
推荐指数
1
解决办法
1万
查看次数

如何在pandas fillna中继续使用"None"值

我有以下字典:

fillna(value={'first_name':'Andrii', 'last_name':'Furmanets', 'created_at':None})

当我把那本字典传给fillna我时,我看到:

提高ValueError('必须指定填充方法或值')\nValueError:必须指定填充方法或值\n"

在我看来,它失败了None价值.

我使用pandas版本0.20.3.

python pandas

11
推荐指数
3
解决办法
8752
查看次数

FastAPI TypeError:“ModelMetaclass”类型的对象不是 JSON 可序列化的

我收到此错误,模型在我运行uvicorn main:app --reload时成功迁移,但是当我尝试转到 127.0.0.1:8000/docs 时出现此错误。我正在为数据库使用 Postgresql

TypeError: Object of type 'ModelMetaclass' is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

这是我的文件结构

backend/main.py
backend/pydantic_models.py
backend/requirements.txt
backend/sql
backend/sql/crud.py
backend/sql/database.py
backend/sql/sql_models.py
backend/sql/__init__.py
Run Code Online (Sandbox Code Playgroud)

我跟着教程https://fastapi.tiangolo.com/tutorial/sql-databases/ 这里是代码。 主文件

from typing import List

from fastapi import FastAPI, Depends, HTTPException, status
from sqlalchemy.orm import Session

from sql import crud, database, sql_models
from pydantic_models import User, Todo, UserCreation, TodoCreation


sql_models.Base.metadata.create_all(bind=database.engine)

app = FastAPI()

def get_db():
    db = database.SessionLocal()
    try:
        yield db
    finally:
        db.close()


@app.post("/users/", response_model=User)
def create_user(user=User, db: Session = Depends(get_db)): …
Run Code Online (Sandbox Code Playgroud)

python-3.x fastapi

10
推荐指数
2
解决办法
3564
查看次数

如何以编程方式用主体实例化 Starlette 的请求?

我有一个包含一些使用 FastAPI 的 API 的项目,其中我需要调用项目内的 API 函数之一。使用 FastAPI 和 Starlette 的 API 函数如下所示

@router.put("/tab/{tab_name}", tags=["Tab CRUD"])
async def insert_tab(request: Request, tab_name: str):
    tab = await request.json()
    new_tab_name = tab["name"]
    new_tab_title = tab["title"]
    # Rest of the code
Run Code Online (Sandbox Code Playgroud)

我发送一个包含新选项卡数据的 JSON 作为我的请求正文,稍后将使用await request.json().

现在,我需要insert_tab在另一个函数中调用 ,因此我需要以某种方式实例化StarletteRequest中的对象。我之前已经这样做过,但没有 JSON 主体:

from starlette.requests import Request
from starlette.datastructures import Headers

headers = Headers()
scope = {
    'method': 'GET',
    'type': 'http',
    'headers': headers
}
request = Request(scope=scope)
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我还需要将 JSON 主体注入到Request …

python starlette fastapi

8
推荐指数
1
解决办法
1万
查看次数

当我使用 fastapi 和 pydantic 构建 POST API 时,出现 TypeError: Object of type is not JSON可序列化

我使用 FastAPi 和 Pydantic 对 POST API 的请求和响应进行建模。

我定义了三个类:

from pydantic import BaseModel, Field
from typing import List, Optional, Dict

class RolesSchema(BaseModel):
    roles_id: List[str]

class HRSchema(BaseModel):
    pk: int
    user_id: str
    worker_id: str
    worker_name: str
    worker_email: str
    schedulable: bool
    roles: RolesSchema
    state: dict

class CreateHR(BaseModel):
    user_id: str
    worker_id: str
    worker_name: str
    worker_email: str
    schedulable: bool
    roles: RolesSchema
Run Code Online (Sandbox Code Playgroud)

我的API程序:

@router.post("/humanResource", response_model=HRSchema)
async def create_humanResource(create: CreateHR):
query = HumanResourceModel.insert().values(
    user_id=create.user_id, 
    worker_id=create.worker_id, 
    worker_name=create.worker_name,
    worker_email=create.worker_email,
    schedulable=create.schedulable,
    roles=create.roles
)
last_record_id = await database.execute(query)
return {"status": "Successfully …
Run Code Online (Sandbox Code Playgroud)

python pydantic fastapi

8
推荐指数
1
解决办法
7508
查看次数

MongoDB 的 FastAPI 问题 - TypeError: 'ObjectId' 对象不可迭代

我在通过 FastAPI 插入 MongoDB 时遇到一些问题。

下面的代码按预期工作。请注意该response变量尚未在 中使用response_to_mongo()

model是一个 sklearn ElasticNet 模型。

app = FastAPI()


def response_to_mongo(r: dict):
    client = pymongo.MongoClient("mongodb://mongo:27017")
    db = client["models"]
    model_collection = db["example-model"]
    model_collection.insert_one(r)


@app.post("/predict")
async def predict_model(features: List[float]):

    prediction = model.predict(
        pd.DataFrame(
            [features],
            columns=model.feature_names_in_,
        )
    )

    response = {"predictions": prediction.tolist()}
    response_to_mongo(
        {"predictions": prediction.tolist()},
    )
    return response
Run Code Online (Sandbox Code Playgroud)

但是,当我predict_model()这样写并将response变量传递给response_to_mongo()

@app.post("/predict")
async def predict_model(features: List[float]):

    prediction = model.predict(
        pd.DataFrame(
            [features],
            columns=model.feature_names_in_,
        )
    )

    response = {"predictions": prediction.tolist()} …
Run Code Online (Sandbox Code Playgroud)

python mongodb pymongo fastapi

6
推荐指数
1
解决办法
6834
查看次数

如何在 FastAPI 中上传 CSV 文件并将其转换为 JSON?

我正在尝试将.csv文件上传到 FastAPI 服务器,然后将其转换为 JSON 并将其返回给客户端。但是,当我尝试直接处理它(而不将其存储在某处)时,我收到此错误:

Error : FileNotFoundError: [Error 2] No such file or directory : "testdata.csv"
Run Code Online (Sandbox Code Playgroud)

这是我的 FastAPI 代码:

async def upload(file: UploadFile = File(...)):
    data = {}    
    with open(file.filename,encoding='utf-8') as csvf:
        csvReader = csv.DictReader(csvf)
        for rows in csvReader:             
            key = rows['No']
            data[key] = rows    
    return {data}```

Run Code Online (Sandbox Code Playgroud)

python csv upload fastapi csvtojson

5
推荐指数
2
解决办法
2万
查看次数

FastAPI返回大量JSON数据非常慢

我有一个 FastAPIGET端点,它返回大量 JSON 数据(约 160,000 行和 45 列)。毫不奇怪,使用返回数据非常json.dumps()慢。我首先使用文件中的数据读取数据json.loads(),并根据输入的参数对其进行过滤。有没有比使用更快的方法将数据返回给用户return data?以目前的状态,需要将近一分钟的时间。

我的代码目前如下所示:

# helper function to parse parquet file (where data is stored)
def parse_parquet(file_path):
    df = pd.read_parquet(file_path)
    result = df.to_json(orient = 'records')
    parsed = json.loads(result)
    return parsed
    

@app.get('/endpoint')
# has several more parameters
async def some_function(year = int | None = None, id = str | None = None):
    if year is None:
        data = parse_parquet(f'path/{year}_data.parquet')
    # no year
    if year is …
Run Code Online (Sandbox Code Playgroud)

python json dataframe pandas fastapi

5
推荐指数
1
解决办法
1万
查看次数

在 FastAPI 中渲染 NumPy 数组

我发现如何使用 FastAPI 将 numpy 数组作为图像返回?然而,我仍然在努力展示图像,它看起来只是一个白色的方块。

io.BytesIO我像这样读入一个数组:

def iterarray(array):
    output = io.BytesIO()
    np.savez(output, array)
    yield output.get_value()
Run Code Online (Sandbox Code Playgroud)

在我的端点中,我的回报是StreamingResponse(iterarray(), media_type='application/octet-stream')

当我留空media_type以推断时,会下载一个 zip 文件。

如何将数组显示为图像?

python numpy bytesio fastapi

3
推荐指数
1
解决办法
7176
查看次数