M.K*_*K.S 3 python sqlalchemy pydantic fastapi
如何在FastAPI中将字符串转换为模型类型?如果我有学生模型并且想要将字符串学生转换为类型模型。如何转换呢?
engine = create_engine(SQLALCHAMY_DATABASE_URL,pool_pre_ping=True,pool_recycle=3600)
meta = MetaData()
con = engine.connect()
SessionLocal = sessionmaker(bind=engine, autocommit=False, autoflush=False)
Base = declarative_base()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
def convert_model(student,db:Session = Depends(database.get_db)):
Q=student.all()
convert_model(student,db)
Run Code Online (Sandbox Code Playgroud)
它给出了错误str object has no attribute all()
在您的示例中,学生是一个定义参数,而不是您的数据库模型。
你应该看看fastapi 官方用户指南,它以简单的方式详细解释了如何构建一个简单而干净的 api。
您有专门的部分介绍如何加载数据库对象。
您有一个关于 honw 的专门部分来处理来自数据库模型的列表响应。
db_config.py
from sqlalchemy import create_engine, MetaData
from sqlalchemy.orm import sessionmaker, declarative_base
from app.settings import get_settings
engine = create_engine(SQLALCHAMY_DATABASE_URL,pool_pre_ping=True,pool_recycle=3600)
meta = MetaData()
con = engine.connect()
SessionLocal = sessionmaker(bind=engine, autocommit=False, autoflush=False)
Base = declarative_base()
def get_session():
db = SessionLocal()
try:
yield db
finally:
db.close()
Run Code Online (Sandbox Code Playgroud)
my_router.py
from typing import List
from sqlalchemy.ext.declarative import declarative_base
from pydantic import BaseModel, Field
from pydantic import parse_obj_as
from db_config import get_session
from db_config import Base
class StudentModel(Base): # <- your database model
something = Column(String)
class StudentSchema(BaseModel): # <- your pydantic model
something: str = Field(..., example="something")
@app_router.get('/students', response_model=List[StudentSchema])
def get_all_StudentModel(session:Session = Depends(get_session)):
return parse_obj_as(List[StudentSchema], session.query(StudentModel).all())
Run Code Online (Sandbox Code Playgroud)