簡體   English   中英

如何連接到 sqlite3 db 文件並在 fastapi 中獲取內容?

[英]How to connect to a sqlite3 db file and fetch contents in fastapi?

我有一個 sqlite.db 文件,它有 5 列和 1000 萬行。 我已經使用 fastapi 創建了一個 api,現在在 api 方法之一中,我想連接到該 sqlite.db 文件並根據某些條件獲取內容(基於)。 我主要會使用 SELECT 和 WHERE。

我怎樣才能通過利用異步請求來做到這一點。 我遇到過 Tortoise ORM 但我不確定如何正確使用它來獲取結果。

from fastapi import FastAPI, UploadFile, File, Form
from fastapi.middleware.cors import CORSMiddleware

DATABASE_URL = "sqlite:///test.db"


@app.post("/test")
async def fetch_data(id: int):
    query = "SELECT * FROM tablename WHERE ID={}".format(str(id))

    # how can I fetch such query faster from 10 million records while taking advantage of async func
    return  results

您在這里遺漏了一點,使用async定義 function 是不夠的。 您需要使用異步數據庫驅動程序來利用協程。

EncodeDatabases庫非常適合此目的。

pip install databases

您還可以使用以下命令安裝所需的數據庫驅動程序:

pip install databases[sqlite]

在你的情況下,這應該很好。

from fastapi import FastAPI, UploadFile, File, Form
from fastapi.middleware.cors import CORSMiddleware
from databases import Database

database = Database("sqlite:///test.db")


@app.on_event("startup")
async def database_connect():
    await database.connect()


@app.on_event("shutdown")
async def database_disconnect():
    await database.disconnect()


@app.post("/test")
async def fetch_data(id: int):
    query = "SELECT * FROM tablename WHERE ID={}".format(str(id))
    results = await database.fetch_all(query=query)

    return  results

從查詢結果集中的列訪問數據的一種方法:

您可以將 db 結果集讀入 Pandas dataframe。 從那里,您可以使用 dataframe[“column name”] 訪問列數據,該數據返回該列數據的類似列表的可迭代對象。 您可以將數據框的內置 to_dict() 方法用於字典數據。

暫無
暫無

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

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