首先感谢版友的帮助
python版本 3.9
最终选择的框架是 FastAPI+uvicorn, DBUtils+PyMysql,
数据库 MySql8.0
关于SqlAlchemy 和 Pymysql摇摆了很长时间,我本来是不喜欢ORM的,因为还要学一套ORM,
但是我唯一考虑的是mapping是否容易。因为pymysql返回的结果是dict,映射成一个class对象我不知道
该怎么做。
但是sqlalchemy实在让我觉得麻烦,就是我的习惯是先建数据库表,这样我要在代码里再描述一遍,太麻烦,
而且容易不一致。
但是FastAPI给了我很大的惊喜
1. response_model=UserVO ,这种方式可以方便的把dict直接转换为UserVO
@router.get("/{id}/", response_model=UserVO, status_code=200)
def get_user(id: int = Path(..., gt=0), current_user: User = Depends(get_current_active_user)):
res = user.get_user(id)
return {'data': res}
2. 因为UserVO继承了FastAPI依赖的pydantic的BaseModel,可以直接使用以下这种方式生成对象
UserVO(**dict)
不需要 user.username = dict["username"],如此繁琐
3. python的property的命名习惯就是snake_case, 与mysql的column完全一致,根本不需要像java
那样必须写一个mappping,把snake_case映射为CamelCase
4. FastAPI的集成oauth2和jwt官方有教程
5. logger配置花了些时间,不过还好。
6. 默认swagger很好用。而且集成了oauth之后,swagger也会控制起来了。
最后,我没有使用FastAPI的 async,await。 怕用不好。
还有一些问题没有解决,比如全局异常处理。还有就是pymysql操作数据库的时候,
有大量这样的with。。。with的样板代码。不知道有什么好的解决办法。
def delete_user(id: int):
with db_pool.connection() as db:
with db.cursor() as cur:
res = cur.execute(sql_delete, id)
logger.info(res)
return res
※ 修改:·gfkid 于 Aug 8 09:42:36 2023 修改本文·[FROM: 45.78.50.*]
※ 来源:·水木社区
http://www.mysmth.net·[FROM: 45.78.50.*]
修改:gfkid FROM 45.78.50.*
FROM 45.78.50.*