用fastapi 和sqlite创建一个档案库管理系统
时间: 2024-04-19 17:08:50 浏览: 12
好的,下面是一个简单的示例,演示如何使用 FastAPI 和 SQLite 创建一个档案库管理系统。
首先,安装必要的库:
```
pip install fastapi
pip install uvicorn
pip install databases
pip install sqlalchemy
```
然后,创建一个 `main.py` 文件,并输入以下代码:
```python
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
import databases
from databases import Database
import sqlalchemy
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
app = FastAPI()
# 数据库配置信息
DATABASE_URL = "sqlite:///./test.db"
# 创建数据库连接
database = Database(DATABASE_URL)
# SQLAlchemy 元数据
metadata = MetaData()
# 模型对应的数据库表
books = Table(
"books",
metadata,
Column("id", Integer, primary_key=True),
Column("title", String(50)),
Column("author", String(50)),
Column("description", String(200)),
Column("price", Integer),
)
# 创建数据库表
engine = create_engine(DATABASE_URL)
metadata.create_all(engine)
# 数据模型
class Book(BaseModel):
title: str
author: str
description: str
price: int
# 创建新书籍
@app.post("/books/")
async def create_book(book: Book):
query = books.insert().values(
title=book.title,
author=book.author,
description=book.description,
price=book.price,
)
last_record_id = await database.execute(query)
return {**book.dict(), "id": last_record_id}
# 获取所有书籍
@app.get("/books/")
async def read_books():
query = books.select()
results = await database.fetch_all(query)
return results
# 获取单个书籍
@app.get("/books/{book_id}")
async def read_book(book_id: int):
query = books.select().where(books.c.id == book_id)
result = await database.fetch_one(query)
if result:
return result
else:
return {"error": "Book not found"}
# 更新书籍
@app.put("/books/{book_id}")
async def update_book(book_id: int, book: Book):
query = (
books.update()
.where(books.c.id == book_id)
.values(
title=book.title,
author=book.author,
description=book.description,
price=book.price,
)
)
await database.execute(query)
return {**book.dict(), "id": book_id}
# 删除书籍
@app.delete("/books/{book_id}")
async def delete_book(book_id: int):
query = books.delete().where(books.c.id == book_id)
await database.execute(query)
return {"message": "Book deleted successfully"}
# 连接到数据库
@app.on_event("startup")
async def startup():
await database.connect()
# 断开数据库连接
@app.on_event("shutdown")
async def shutdown():
await database.disconnect()
```
这个示例创建了一个名为 `books` 的数据库表,用于存储书籍信息。它提供了以下 API:
- `POST /books/`:创建新书籍
- `GET /books/`:获取所有书籍
- `GET /books/{book_id}`:获取单个书籍
- `PUT /books/{book_id}`:更新书籍
- `DELETE /books/{book_id}`:删除书籍
你可以使用 SQLite 数据库浏览器等工具来管理数据。
最后,在命令行中运行以下命令启动应用程序:
```
uvicorn main:app --reload
```
现在,你可以通过浏览器或其他 HTTP 客户端来访问这些 API。例如,要创建一个新书籍:
```
POST http://localhost:8000/books/
{
"title": "Python入门教程",
"author": "张三",
"description": "一本Python入门教程",
"price": 50
}
```
要获取所有书籍:
```
GET http://localhost:8000/books/
```
要获取单个书籍:
```
GET http://localhost:8000/books/1
```
要更新书籍:
```
PUT http://localhost:8000/books/1
{
"title": "Python入门教程2",
"author": "张三",
"description": "一本Python入门教程",
"price": 60
}
```
要删除书籍:
```
DELETE http://localhost:8000/books/1
```