启动&配置
uvicorn main:app --reload #官网初始化加载
uvicorn main:app --port your-port #指定你的端口启动
目录解析
main.py 主线程
database.py 数据库定义文件
域名/docs 查看生成的文档
http://127.0.0.1:8000/redoc 可选api文档
代码解析
main.py
自动生成数据库表结构
import models
models.Base.metadata.create_all(bind=engine, checkfirst=True)
from fastapi import Depends, FastAPI, BackgroundTasks,HTTPException
app = FastAPI() 定义初始化
#ip鉴权
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"]
)
#引入引用
from database import SessionLocal, engine
#定义数据库
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
#判断是直接执行还是模块导入 限直接执行
if __name__ == '__main__':
#启动 Uvicorn 服务器,运行 ASGI 应用
app: FastAPI 应用实例(通常定义为 app = FastAPI())。
host="127.0.0.1": 仅允许本地访问(如需外网访问,改为 0.0.0.0)。
port=8000: 指定监听端口(默认 8000,可自定义)
uvicorn.run(app, host="127.0.0.1", port=8000)
database.py
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# SQLALCHEMY_DATABASE_URL = "sqlite:///./***.db"
# SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db"
SQLALCHEMY_DATABASE_URL = "mysql+pymysql://用户名:密码@ip:3306/数据库名称"
engine = create_engine(
SQLALCHEMY_DATABASE_URL,
pool_size=10, # 连接池保持的最小连接数
max_overflow=20, # 连接池允许的最大溢出连接数
pool_recycle=3600, # 每隔3600秒回收连接(小于MySQL的wait_timeout)
pool_pre_ping=True # 执行操作前检查连接有效性(推荐)
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
315

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



