from fastapi import FastAPI
from sqlalchemy import create_engine, MetaData,text
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import sessionmaker
app = FastAPI()
# 替换为你的数据库连接信息
DATABASE_URI = "mysql://root:123456@127.0.0.1:3306/dbName"
engine = create_engine(DATABASE_URI,echo=True)
metadata = MetaData()
# 反射数据库表结构
metadata.reflect(engine)
# 使用automap_base创建一个Base类,它会自动为所有表创建一个映射
Base = automap_base(metadata=metadata)
Base.prepare()
# 也可以这样:Base.prepare(engine, reflect=True)
# 创建会话
Session = sessionmaker(bind=engine)
session = Session()
@app.get("/items/")
async def read_items():
# 将映射的表名与类关联
tb = Base.classes.tableName
# 从模型中查询数据
results = session.query(tb).all()
results = session.query(tb).filter(tb.id == 2).first()
return results
第二种方法
from fastapi import FastAPI
from sqlalchemy import create_engine, MetaData, Table
from sqlalchemy.orm import declarative_base, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
app = FastAPI()
# 创建数据库引擎
engine = create_engine('mysql://root:123456@127.0.0.1:3306/')
# 创建会话
SessionLocal = sessionmaker(bind=engine)
# 创建模型基类
Base = declarative_base()
# 创建元数据对象
metadata = Base.metadata
# 或者使用
# metadata = MetaData()
# 动态创建模型
class User(Base):
__table__ = Table('', metadata, autoload_with=engine)
# 如果需要,可以在这里添加额外的关系或方法
@app.get("/test/")
def read_user():
session = SessionLocal()
# 使用动态模型查询数据
users = session.query(User).all()
return users