文章版权声明
本平台所有文章内容均由杭州阿尔法伽公司独立创作、编辑与发布,未经杭州阿尔法伽公司书面授权,任何单位或个人不得擅自复制、转载、摘编、修改、汇编或以其他任何方式使用上述文章内容。如因作品版权引发任何纠纷,杭州阿尔法伽公司将依法追究侵权者的法律责任。
- 所有必要的导入语句,比如 from fastapi import FastAPI, HTTPException,以及 motor 的异步客户端。
- 数据库连接的初始化,确保在应用启动时正确连接 MongoDB。
- SyncRecord 模型的实际使用,比如在 sync_items 路由中更新同步记录到数据库,而不是注释中提到的 “实际应存入数据库”。
- 错误处理,比如 HTTPException 在找不到数据时的返回。
- 主函数部分,使用 uvicorn 运行应用,方便用户直接运行。
以下是完整可运行的 FastAPI+MongoDB RESTful 同步后台代码,包含数据库初始化、完整路由和错误处理:
python
# 完整代码:backend/main.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from motor.motor_asyncio import AsyncIOMotorClient
from datetime import datetime, timedelta
import json
# 初始化FastAPI应用
app = FastAPI(title="Data Sync Service", version="1.0.0")
# 数据库连接(生产环境应从环境变量获取)
MONGO_URI = "mongodb://localhost:27017"
mongo_client = AsyncIOMotorClient(MONGO_URI)
db = mongo_client["sync_demo"] # 数据库名
items_collection = db["items"] # 业务数据集合
sync_records_collection = db["sync_records"] # 同步记录集合
# 数据模型定义
class Item(BaseModel):
id: str | None = None # 客户端生成UUID,服务端自动填充ObjectId
content: str
updated_at: datetime = datetime.utcnow() # 服务端时间戳
class Config:
json_encoders = {datetime: lambda v: v.isoformat()}
# 同步记录模型
class SyncRecord(BaseModel):
user_id: str
last_sync: datetime = datetime(2000, 1, 1) # 初始同步时间
class Config:
json_encoders = {datetime: lambda v: v.isoformat()}
# 启动事件:创建索引
@app.on_event("startup")
async def startup_event():
# 为updated_at创建索引,加速同步查询
await items_collection.create_index("updated_at")
# 为user_id+last_sync创建唯一索引
await sync_records_collection.create_index(
[("u

最低0.47元/天 解锁文章
2534

被折叠的 条评论
为什么被折叠?



