簡體   English   中英

將 fastAPI POST 保存到 csv

[英]Saving fastAPI POST to csv

我有一個氣象站,它發送 json 數據,並希望制作一個 fastAPI 服務器來接收它並將其保存到磁盤。 目前我有

from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class WeatherItem(BaseModel):
    wind_direction_raw: int
    rain_amount_raw: int
    timestamp: list = []
    elapsed_time: int
    wind_speed_raw: int
    message_id: int

@app.post("/station")
async def create_item(item: WeatherItem):
    return item

當我用uvicorn main:app --host 192.168.1.151 --port 9494啟動它並從 curl 發送測試數據時效果很好

curl -X POST -H "Content-Type: application/json" --data '{"elapsed_time": 6245, "timestamp": [2020, 7, 26, 12, 2, 21, 6, 208], "wind_direction_raw": 108, "wind_speed_raw": 5, "message_id": 666, "rain_amount_raw": "0"}' http://192.168.1.151:9494/station

現在我需要將這些數據保存到磁盤。 我認為最簡單的方法是將其附加到 csv 文件中。 但我不知道如何將 pydantic model 導出到 csv。 有沒有一種簡單的方法可以做到這一點,或者其他序列化方法是否更受歡迎? 我想在R中分析這些數據,所以我需要它以相當可互換的格式保存在磁盤上。

據我所知,您有以下選擇:

選項1

Append 通過枚舉像這樣的條目的整個列表將直接值傳遞到 CSV 文件

with open("myFile.csv", "a") as f:
    f.write(f"{model.entry},{model.another_entry}")

(這是阻止版本)

請注意,您還可以創建字典並遍歷值 append 它們,盡管很難保留條目之間的順序。

選項 2

將文件加載到 memory 與 pandas、append 到DataFrame文件然后保存到數據文件

import pandas as pd

...

data = pd.read_csv("my_file.csv")
data_to_add = DataFrame.from_dict(my_model.dict())
data = data.append(data_to_add)
data.to_csv("my_file.csv", index=False)

@Isabi 有一個很好的答案,讓我走上了正確的道路,我已經接受了。 但為了完整起見,我選擇了

import csv

...

@app.post("/station")
async def create_item(item: WeatherItem):

    write_path = "/home/pi/weather_station/data/weather_data_" + date.today().strftime("%Y-%m-%d") + ".csv"

    with open(write_path, "a") as f:
        writer = csv.writer(f)
        writer.writerow(dict(item).values())
    return item

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM