通過創建pydantic模型進行驗證提交數據
from pydantic import BaseModel class UserBase(BaseModel): email: str class UserCreate(UserBase): """ 請求模型驗證: email: password: """ password: str class Users(UserBase): """ 響應模型: id:email: is_active並且設置orm_mode與之兼容 """ id: int is_active: bool class Config: orm_mode = True
我們去通過傳入數據庫連接以及參數等進行數據庫操作,包括創建用戶、查詢用戶等,返回的是orm模型對象。
from sqlalchemy.orm import Session # 通過id查詢用戶 def get_user(db: Session, user_id: int): return db.query(User).filter(User.id == user_id).first() # 新建用戶 def db_create_user(db: Session, user: UserCreate): fake_hashed_password = user.password + "notreallyhashed" db_user = User(email=user.email, hashed_password=fake_hashed_password) db.add(db_user) db.commit() # 提交保存到數據庫中 db.refresh(db_user) # 刷新 return db_user
接下來,我們就是在實際的接口中調用
app = FastAPI() # Dependency def get_db(): """ 每一個請求處理完畢后會關閉當前連接,不同的請求使用不同的連接 :return: """ db = SessionLocal() try: yield db finally: db.close() # 新建用戶 @app.post("/users/", response_model=Users) def create_user(user: UserCreate, db: Session = Depends(get_db)): return db_create_user(db=db, user=user) # 通過id查詢用戶 @app.get("/user/{user_id}", response_model=Users) def read_user(user_id: int, db: Session = Depends(get_db)): db_user = get_user(db, user_id=user_id) if not db_user: raise HTTPException(status_code=404, detail="User not found") return db_user
我們去啟動下,看下對應的接口。
uvicorn main:app --reload
我們去用postman去請求下
創建下用戶
查詢下賬戶
我們去查詢不存在的id
我們在用postman去請求的時候,發現
報錯了,我們看下如何處理
因為是唯一的索引,所以我們在去創建用戶的時候,要去判斷用戶是否存在。
我們先去創建一個通過email查詢用戶的
def get_user_emai(db:Session,email:str): return db.query(User).filter(User.email==email).first()
我們在創建用戶的時候,我們去判斷下
@app.post("/users/", response_model=Users) def create_user(user: UserCreate, db: Session = Depends(get_db)): db_crest=get_user_emai(db,user.email) if not db_crest: return db_create_user(db=db, user=user) raise HTTPException(status_code=200, detail="賬號不能重復")
如果不存在,我們就去創建,如果存在,我們就直接返回。我們看下接口
我們看下最后的數據庫的存儲。
其實操作數據庫還是很簡單的。
文章首發在公眾號,歡迎關注。