首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

FastAPI整合MySQL实现商品管理API

前言

学无止境,无止境学。坚持每天学点编程知识,坚持每天写点小文章,坚持每天进步一点点。大家好,我是张大鹏,喜欢学习和分享,希望能够通过此公众号,将自己学到的东西分享给大家,和大家一起交流,一起成长,一起进步。

乾坤未定,你我皆是黑马。大鹏一日同风起,扶摇直上九万里。宝剑锋从磨砺出,梅花香自苦寒来。不积跬步,无以至千里,不积小流无以成江海。

如果有多余的时间,就坚持学习吧,小时候学习改变命运,长大了学习丰富内涵,老了学习带来宁静。活到老,学到老,我能行!

课程介绍

《Python+Vite+Vue3前后端分类企业商城系统》实战课

本教程属于后端部分第5个教程,之前的教程还有:

《Python异步接口开发框架FastAPI入门教程》

《FastAPI实现Oauth2和JWT登录》

《FastAPI组件化实现Oauth2和JWT登录》

《FastAPI实现商品管理API》

peewee基本用法

安装

pip install peewee

pip install pymysql

创建模型

import pymysql

from peewee import *

from playhouse.db_url import connect

pymysql.install_as_MySQLdb()

db = connect('mysql://root:root@localhost:3306/gaoxiang_shop_admin')

class Goods(Model):

name = CharField()

price = FloatField()

class Meta:

database = db

db.connect()

创建表

# 创建表格

try:

db.create_tables([Goods])

except Exception as e:

pass

新增商品

# 创建商品

goods = Goods(name='《React学习手册》', price=128)

goods.save()

根据ID查询商品

# 根据ID查询

goods = Goods.get(1)

print(goods.name, goods.price)

修改商品

# 修改

goods = Goods.get(1)

goods.name = "《React学习手册111》"

goods.save()

分页查询商品

# 分页查询

data = Goods.select().paginate(2, 2)

print(list(data))

完整代码

import pymysql

from peewee import *

from playhouse.db_url import connect

pymysql.install_as_MySQLdb()

db = connect('mysql://root:root@localhost:3306/gaoxiang_shop_admin')

class Goods(Model):

name = CharField()

price = FloatField()

class Meta:

database = db

db.connect()

# 创建表格

try:

db.create_tables([Goods])

except Exception as e:

pass

# 创建商品

goods = Goods(name='《React学习手册》', price=128)

goods.save()

# 根据ID查询

goods = Goods.get(1)

print(goods.name, goods.price)

# 修改

goods = Goods.get(1)

goods.name = "《React学习手册111》"

goods.save()

goods = Goods.get(1)

print(goods.name, goods.price)

# 分页查询

data = Goods.select().paginate(1, 2)

print(list(data))

基于MySQL的商品管理接口

数据准备

import pymysql

from fastapi import FastAPI

from peewee import *

from playhouse.db_url import connect

from pydantic import BaseModel

pymysql.install_as_MySQLdb()

db = connect('mysql://root:root@localhost:3306/gaoxiang_shop_admin')

app = FastAPI()

class GoodsModel(Model):

name = CharField()

price = FloatField()

class Meta:

database = db

db_table = "goods"

class GoodsSchema(BaseModel):

name: str # 商品名称

price: float # 商品价格

def get_response(data=None):

response = {"code": 10000, "msg": "success", "status": True}

if data is not None:

response["data"] = data

return response

def get_response_error(code, msg):

return {"code": code, "msg": msg, "status": False}

新增商品接口

@app.post("/goods")

async def post_goods(goods: GoodsSchema):

try:

goods_model = GoodsModel(**goods.dict())

goods_model.save()

return get_response()

except Exception as e:

print(e)

return get_response_error(10003, "保存商品数据失败")

根据ID获取商品接口

@app.get("/goods/")

async def get_goods_by_id(gid: int):

try:

goods = GoodsModel.get(gid)

return get_response(goods.__data__)

except Exception as e:

print(e)

return get_response_error(10004, "商品不存在")

@app.get("/goods")

async def get_goods(page: int = 1, size: int = 20):

query = GoodsModel.select()

count = query.count()

result = query.paginate(page, size).dicts()

data = {

"total": count,

"data": list(result)

}

return get_response(data)

修改商品接口

@app.put("/goods/")

async def put_goods(gid: int, goods: GoodsSchema):

try:

goods_model = GoodsModel.get(gid)

goods_model.name = goods.name

goods_model.price = goods.price

goods_model.save()

return get_response()

except Exception as e:

return get_response_error(10004, "商品不存在")

删除商品接口

@app.delete("/goods/")

async def delete_goods(gid: int):

try:

GoodsModel.get(gid).delete_instance()

except Exception as e:

pass

return get_response()

完整代码

import pymysql

from fastapi import FastAPI

from peewee import *

from playhouse.db_url import connect

from pydantic import BaseModel

pymysql.install_as_MySQLdb()

db = connect('mysql://root:root@localhost:3306/gaoxiang_shop_admin')

app = FastAPI()

class GoodsModel(Model):

name = CharField()

price = FloatField()

class Meta:

database = db

db_table = "goods"

class GoodsSchema(BaseModel):

name: str # 商品名称

price: float # 商品价格

def get_response(data=None):

response = {"code": 10000, "msg": "success", "status": True}

if data is not None:

response["data"] = data

return response

def get_response_error(code, msg):

return {"code": code, "msg": msg, "status": False}

# http://localhost:8000/docs

# http://localhost:8000/goods

@app.post("/goods")

async def post_goods(goods: GoodsSchema):

try:

goods_model = GoodsModel(**goods.dict())

goods_model.save()

return get_response()

except Exception as e:

print(e)

return get_response_error(10003, "保存商品数据失败")

@app.get("/goods/")

async def get_goods_by_id(gid: int):

try:

goods = GoodsModel.get(gid)

return get_response(goods.__data__)

except Exception as e:

print(e)

return get_response_error(10004, "商品不存在")

# http://localhost:8000/goods

@app.get("/goods")

async def get_goods(page: int = 1, size: int = 20):

query = GoodsModel.select()

count = query.count()

result = query.paginate(page, size).dicts()

data = {

"total": count,

"data": list(result)

}

return get_response(data)

@app.put("/goods/")

async def put_goods(gid: int, goods: GoodsSchema):

try:

goods_model = GoodsModel.get(gid)

goods_model.name = goods.name

goods_model.price = goods.price

goods_model.save()

return get_response()

except Exception as e:

return get_response_error(10004, "商品不存在")

@app.delete("/goods/")

async def delete_goods(gid: int):

try:

GoodsModel.get(gid).delete_instance()

except Exception as e:

pass

return get_response()

if __name__ == '__main__':

import uvicorn

uvicorn.run("test:app")

总结

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230112A00JPE00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券