如何使用NoSQL数据库设置Fast API应用程序

简介

在开发Python应用程序时,FastAPI是构建高性能解决方案的顶级选择之一。它提供了速度、简便性以及对异步编程的支持,使其成为开发现代、可扩展应用程序的理想选择。
在这篇教程中,我们将带你了解如何设置一个带有NoSQL数据库的FastAPI应用程序。在存储和管理数据方面,NoSQL数据库提供了灵活性和可扩展性,使它们成为需要处理多样化和复杂数据结构的应用程序的绝佳选择。

先决条件

在开始之前,你需要确保以下内容已准备妥当:

  • 一个运行Ubuntu的服务器,以及一个具有sudo特权的非root用户和一个活动的防火墙。要了解如何设置,请从这个列表中选择你的发行版,并遵循我们的初始服务器设置指南。请确保使用支持的Ubuntu版本

  • 熟悉 Linux 命令行。要了解或复习命令行,您可以查看这个关于Linux 命令行入门的指南。

  • 在 Ubuntu 终端中运行 sudo apt-get update,以确保您的系统具有通过您系统配置的仓库中的软件的最新版本和安全更新。

这些说明适用于最新版本的 Ubuntu:Ubuntu 24.04、Ubuntu 22.04 和 Ubuntu 20.04。如果你正在使用 Ubuntu 版本 <= 18.04,我们建议你升级到一个更新的版本,因为 Ubuntu 不再为这些版本提供支持。本指南集合将帮助您升级 Ubuntu 版本。

步骤 1 – 在您的机器上设置 Python 环境

在本教程中,我们将使用 python3 包来运行命令。最新的 Ubuntu 版本已经安装了 Python 3,所以要验证其安装,请运行以下命令:

python3 --version

如果这返回错误,您可以运行以下命令来安装/重新安装该包:

sudo apt-get install python3

接下来,您需要安装 pip 以安全地安装 Python 包及其依赖关系。

sudo apt-get install python3-pip

步骤 2 – 创建虚拟环境

如果您使用的 Ubuntu 版本 < 24.04,则不需要创建虚拟环境,但隔离项目依赖项是一个好习惯。

从Python 3.11和pip 22.3开始,有一个新的PEP 668,它规定将Python基础环境标记为“外部管理”,这意味着除非你在虚拟环境中工作,否则你将无法成功使用pip安装包。

在这个步骤中,你将为你的项目创建一个虚拟环境,这将隔离你项目的依赖项,以避免不同包版本之间可能的冲突。在终端中运行以下命令集:

sudo apt-get install python3-venv

这将安装创建虚拟环境所需的venv包。

python3 -m venv fastapi-env

此命令将在你的工作目录内部创建一个名为fastapi-env的虚拟环境。为了开始在这个环境中工作,你需要激活它。

source fastapi-env/bin/activate

成功执行后,你将在终端中看到这样的前缀提示:

(fastapi-env) user@machine:~$

现在,你可以开始在这个虚拟环境中安装所需的依赖项。

第3步 – 安装所需库和包

在这个步骤中,你将安装几个必要的包和库,以便成功遵循本教程。

让我们开始安装fastapi,这是构建你的FastAPI应用程序所必需的,以及uvicorn,这是运行FastAPI应用程序所必需的。

pip install fastapi uvicorn

在这个教程中,我们将使用MongoDB作为NoSQL数据库。为了从你的FastAPI内部与MongoDB交互,你需要安装motor,这是MongoDB的异步Python驱动程序。

pip install motor

步骤4 – 在Ubuntu上安装和设置MongoDB

要在你的Ubuntu机器上安装MongoDB,请在终端中运行以下命令集:

wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/mongodb-archive-keyring.gpg] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

执行成功后,这会返回echo参数。接下来,快速执行:

sudo apt-get update

这将确保在设置MongoDB密钥后获取最新更新。

接下来,你需要在你系统中安装一个openssl依赖项,这是MongoDB安装所必需的。

wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb

执行后,系统会要求你重新启动服务。重启后,使用以下命令安装MongoDB:

sudo apt-get install -y mongodb

启动并启用MongoDB服务:

sudo systemctl start mongod
sudo systemctl enable mongod

你可以通过运行以下命令来检查MongoDB服务状态和测试连接:

sudo systemctl status mongod
mongo --eval 'db.runCommand({connectionStatus: 1})'

第5步 – 创建FastAPI应用程序

下一步是创建一个FastAPI应用程序。在你的工作目录中,创建一个database.py文件:

nano database.py

这会打开一个空的文本编辑器。在这里编写你的数据库连接逻辑。

database.py
from motor.motor_asyncio import AsyncIOMotorClient

MONGO_DETAILS = "mongodb://localhost:27017"

client = AsyncIOMotorClient(MONGO_DETAILS)

db = client.mydatabase

collection = db.mycollection

假设mycollection of mydatabase中填充了一些数据,你现在创建一个main.py,其中包含你的应用程序逻辑。在下面的FastAPI应用程序中,使用database.py建立数据库连接,定义AI预测的路由。使用这些路由,输入被验证。

nano main.py

在文本编辑器中编写逻辑:

main.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from sklearn.linear_model import LinearRegression
import numpy as np
from database import collection

app = FastAPI()

# 简单的数据集和模型
x = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 6, 8, 10])

model = LinearRegressions()
model.fit(x, y)

# 定义Pydantic模型进行输入验证
class InputData(BaseModel):
  feature: float

# route_1 根据输入特征预测输出
@app.post("/predict/")
async def predict(input_data: InputData):
  try:
    prediction = model.predict([[input_data.feature]])
    return {"prediction": prediction[0]}
  except Exception as ex:
    raise HTTPException(status_code=400, detail=str(ex))

# route_2 与MongoDB交互
@app.get("/items/")
async def get_item():
  items = []
  async for item in collection.find():
    items.append(item)
  return items

# route_3 将新条目添加到MongoDB
@app.post("/items/")
async def create_item(item: dict):
  new_item = await collection.insert_one(item)
  created_item = await collection.fine_one({"_id": new_item.inserted_id})
  return created_item

这个应用程序的工作原理如下:

  • 来自sklearn的线性回归模型:这个模型根据一个输入特征预测输出。
  • 来自Pydantic模型的输入数据:这定义了预测端点的预期输入结构。在这种情况下,它是float
  • MongoDB路由:路由/items/POST /items/允许您从MongoDB集合中检索和插入项目。

步骤6 – 运行FastAPI应用程序

要成功运行此应用程序,您需要安装应用程序中使用的库和包。

pip install pydantic scikit-learn numpy

现在,使用以下命令运行此应用程序:

uvicorn main:app --reload

该命令的输出将是:

Output
INFO: Will watch for changes in these directories: ['/path/to/your/project'] INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) INFO: Started reloader process [XXXXX] using statreload INFO: Started server process [XXXXX] INFO: Waiting for application startup. INFO: Application startup complete.

FastAPI自动生成了使用Swagger UI的交互式API文档。您可以通过导航到http://127.0.0.1:8000/docs来访问它。

您可以使用curl或Postman等工具来调用根据您的输入预测值的端点。

curl -X POST "http://127.0.0.1:8000/predict/" -H "Content-type: application/json" -d '{"feature": 3}'

步骤7 [可选] – 使用Docker Compose运行应用程序

您可以使用 docker-compose 容器化您的应用程序并运行它。通过容器化您的应用程序,可以简化部署过程,使应用程序更易于部署、扩展和维护。要使用 Dockerfile 将您的应用程序定义为容器,请遵循 使用 Docker Compose 部署 FastAPI 应用程序 中提到的步骤。

结论

在本教程中,您学会了如何成功设置带有 MongoDB 的 FastAPI 应用程序,创建了一个简单的基于 AI 的应用程序,可以存储和检索输入预测。

FastAPI 与 NoSQL 数据库的结合为构建和扩展 AI 驱动的应用程序提供了强大而灵活的环境。

Source:
https://www.digitalocean.com/community/tutorials/set-up-fastapi-app-with-nosql-db