use*_*_12 5 python python-3.x 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
Run Code Online (Sandbox Code Playgroud)
Yag*_*nci 15
你在这里遗漏了一点,定义一个函数async是不够的。您需要使用异步数据库驱动程序才能利用协程的优势。
pip install databases
Run Code Online (Sandbox Code Playgroud)
您还可以使用以下命令安装所需的数据库驱动程序:
pip install databases[sqlite]
Run Code Online (Sandbox Code Playgroud)
就您而言,这应该会起到很好的作用。
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12437 次 |
| 最近记录: |