利用 python - fastapi完成数据库操作

Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

项目目录如图所示 本篇直接给出代码 不做解释

__init__.py文件为空即可 作为一个可识别为包的程序作用

db_manager.py 文件

import sqlite3

def initialize_database():
    conn = sqlite3.connect("database.db")
    cursor = conn.cursor()

    # 创建用户表
    cursor.execute("""
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        username VARCHAR(30) UNIQUE,
        password VARCHAR(50)
    )
    """)

    # 创建IP地址数据表
    cursor.execute("""
    CREATE TABLE IF NOT EXISTS ip_addresses (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        ip VARCHAR(50),
        description VARCHAR(100)
    )
    """)

    conn.commit()
    conn.close()

def get_db_connection():
    conn = sqlite3.connect("database.db")
    return conn

data_router.py 文件

from fastapi import APIRouter, HTTPException, status
from pydantic import BaseModel
import sqlite3
from database.db_manager import get_db_connection

router = APIRouter()

class DataRequest(BaseModel):
    ip: str
    description: str

@router.post("/database/add")
async def add_data(data_request: DataRequest):
    conn = get_db_connection()
    cursor = conn.cursor()
    cursor.execute("INSERT INTO ip_addresses (ip, description) VALUES (?, ?)", (data_request.ip, data_request.description))
    conn.commit()
    conn.close()
    return {"message": "Data added successfully"}

@router.post("/database/del")
async def delete_data(id: int):
    conn = get_db_connection()
    cursor = conn.cursor()
    cursor.execute("DELETE FROM ip_addresses WHERE id=?", (id,))
    if cursor.rowcount == 0:
        raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Data not found")

    conn.commit()
    conn.close()
    return {"message": "Data deleted successfully"}

@router.post("/database/modify")
async def modify_data(id: int, data_request: DataRequest):
    conn = get_db_connection()
    cursor = conn.cursor()
    cursor.execute("UPDATE ip_addresses SET ip=?, description=? WHERE id=?", (data_request.ip, data_request.description, id))
    if cursor.rowcount == 0:
        raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Data not found")

    conn.commit()
    conn.close()
    return {"message": "Data modified successfully"}

@router.get("/database/find")
async def find_data(id: int):
    conn = get_db_connection()
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM ip_addresses WHERE id=?", (id,))
    data = cursor.fetchone()
    if not data:
        raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Data not found")

    conn.close()
    return {"id": data[0], "ip": data[1], "description": data[2]}

user_router.py 文件

from fastapi import APIRouter, HTTPException, status
from pydantic import BaseModel
import sqlite3
import hashlib
from database.db_manager import get_db_connection

router = APIRouter() # 创建一个路由器

def encrypt_password(password: str) -> str:
    return hashlib.md5(password.encode()).hexdigest()

class RegisterRequest(BaseModel):
    username: str
    password: str

class LoginRequest(BaseModel):
    username: str
    password: str

@router.post("/register")
async def register_user(register_request: RegisterRequest):
    conn = get_db_connection()
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM users WHERE username=?", (register_request.username,))
    existing_user = cursor.fetchone()
    if existing_user:
        raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Username already registered")

    encrypted_password = encrypt_password(register_request.password)
    cursor.execute("INSERT INTO users (username, password) VALUES (?, ?)", (register_request.username, encrypted_password))
    conn.commit()
    conn.close()

    return {"message": "User registered successfully"}

@router.post("/login") # 使用POST方法
async def login_user(login_request: LoginRequest):
    conn = get_db_connection()
    cursor = conn.cursor()
    encrypted_password = encrypt_password(login_request.password)
    cursor.execute("SELECT * FROM users WHERE username=? AND password=?", (login_request.username, encrypted_password))
    user = cursor.fetchone()
    if not user:
        raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid credentials")

    conn.close()
    return {"message": "Login successful"}

最后是main.py 文件

from fastapi import FastAPI
import uvicorn
from routers import user_router, data_router
from database.db_manager import initialize_database

app = FastAPI()

# 初始化数据库
initialize_database()


# 根路径处理程序
@app.get("/")
async def root():
    return {"message": "Welcome to my 0. FastAPI application"}


# 挂载用户管理路由
app.include_router( 
    user_router.router, prefix="/users", tags=["users"]
)  # prefix 表示路由的前缀,tags 表示路由的分组

# 挂载数据库操作路由
app.include_router(data_router.router, prefix="/database", tags=["database"])

if __name__ == "__main__":
    uvicorn.run(app, host="127.0.0.1", port=8000, reload=True)

    # 运行命令:uvicorn main:app --reload

启动程序:运行命令 uvicorn main:app --reload

不做过多解释 有需要了解请联系我即可。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值