與資料庫對話 ( 範例 CRUD ) II
Create 創建 (POST)
增加1筆 item
的方法。
py
def add_item(db: Session, addItem:schema.create_item):
item = model.UserCreate(
email=addItem.email,
password=addItem.password
)
db.add(item)
db.commit()
db.refresh(item)
return item
py
import pydantic import BaseModel
class UserBase(BaseModel)
email:str
class UserCreate(UserBsae)
password:str
py
@app.post('/path',status_code=201)
def create_item(sc_item:schema.UserCreate, db:Session=Depends(get_db)):
# 先確認是否重複
add_data_=crud.check_email(db, email=sc_item.email)
if add_data:
raise HTTPExcption(status_code=404, detail="資料庫已建檔")
return crud.add_item(db=db, addItem=sc_item)
如果要在 item
裡加入第二層的方法:
py
py
py
總結:
- def 定義 create 函式操作時需與 schema 物件類別(class)的欄位互相配合。
- 需增加函式確認避免資料重複。
- 承2. 增加判斷式的後續返回動作。
Update 更新 (PUT)(PATCH)
py
@app.put('/path/{id}')
def update_item(id:str,payload:schema.schema,db:Session=Depends(get_db)):
query_db=db.query(models.)
return 'update item'
TIP
def update_item(所選的id , 定義操作.操作方法, 資料庫): 資料表=選擇資料表(資料表名稱).篩選(資料表內的id==所選的id)
Delete 刪除 (DELETE)
刪除階段可暫時不需要再使用response_mode
。
py
@app.delete('/path/{id}')
def del_item(id:int, db:Session=Depends(get_db)):
select_id=db.query(models.Item).filter(models.Item.id==id).first()
if select:
db.delete(select_id)
db.commit()
db.close
return '已刪除 item!!'
else:
return {"mssage":f"找不到id:{id}資料"}
py
def del_item(db:Session, id:int):
select_id=db.query(models.Item).filter(models.Item.id==id).first()
db.delete(select_id)
db.commit()
db.close()
return '已刪除 item!!'
py
@app.delete('/path/{id}')
def delete_item(item_id:int, db:Session=Depends(get_db)):
# 先使用id來找看看資料是否存在
find_Item=crud.read_one(db, id=item_id)
if find_Item:
return crud.del_item(db, id=item_id)
else:
return {"mssage":f"找不到id:{item_id}資料"}
刪除方法的總結:
- 先挑出要刪除的 id。
- 判斷 id 是否還存在資料庫內。
- 回饋判斷後的結果: 刪除 或 找不到id。