我有一个基本的词典如下:
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.
我有一个.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),它起作用了,因为它返回一个字符串。
我应该如何进行?我相信这不是一个好方法。
我有以下字典:
fillna(value={'first_name':'Andrii', 'last_name':'Furmanets', 'created_at':None})
当我把那本字典传给fillna我时,我看到:
提高ValueError('必须指定填充方法或值')\nValueError:必须指定填充方法或值\n"
在我看来,它失败了None价值.
我使用pandas版本0.20.3.
我收到此错误,模型在我运行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) 我有一个包含一些使用 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 …
我使用 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) 我在通过 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) 我正在尝试将.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) 我有一个 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) 我发现如何使用 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 文件。
如何将数组显示为图像?