ORM sqlAlchemy
更新pip
python -m pip install --upgrade pip -i mirrors.aliyun.com/pypi/simple…
先安装预编译的 greenlet(不进行源码编译)
pip install greenlet --only-binary :all: -i mirrors.aliyun.com/pypi/simple…
如果上面成功,再安装 sqlalchemy[asyncio] 和 aiomysql异步mysql驱动
pip install "sqlalchemy[asyncio]" aiomysql -i mirrors.aliyun.com/pypi/simple…
下载包文件wheel
pip download 'sqlalchemy[asyncio]' aiomysql -d ./
安装wheel包
pip install --no-index --find-links=./package 'sqlalchemy[asyncio]' aiomysql
from datetime import datetime
import uvicorn
from fastapi import FastAPI
from sqlalchemy import DateTime, func, String, Float
from sqlalchemy.ext.asyncio import create_async_engine
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
ASYNC_DATABASE_URL = "mysql+aiomysql://root:123456@192.168.2.98:3306/fastapi_test?charset=utf8"
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
@app.get("/hello/{name}")
async def say_hello(name: str):
return {"message": f"Hello {name}"}
async_engine = create_async_engine(
ASYNC_DATABASE_URL,
echo=True,
pool_size=10,
max_overflow=20
)
class Base(DeclarativeBase):
create_time: Mapped[datetime] = mapped_column(DateTime, insert_default=func.now, default=func.now, comment="创建时间")
update_time: Mapped[datetime] = mapped_column(DateTime, insert_default=func.now, onupdate=func.now, comment="更新时间")
class Book(Base):
__tablename__ = "book"
id: Mapped[int] = mapped_column(primary_key=True, comment="书籍id")
bookname: Mapped[str] = mapped_column(String(255))
author: Mapped[str] = mapped_column(String(255))
price: Mapped[float] = mapped_column(Float)
publisher: Mapped[str] = mapped_column(String(255))
async def create_tables():
async with async_engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
@app.on_event("startup")
async def startup_event():
await create_tables()
if __name__ == '__main__':
uvicorn.run(
"main:app",
host="0.0.0.0",
port=8000,
reload=True, # 开发模式自动重载
log_level="debug"
)