如何连接到 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
我有一个 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