如何连接到 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 定义一个函数是不够的。您需要使用异步数据库驱动程序才能利用协程。

Encode's Databases 图书馆非常适合这个目的。

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