目录
自从前年8月trans到自动驾驶事业部后,日常开发使用的语言变得多元,golang、c++、python、前端都有涉及,尤其是python,这种弱类型语言,代码的可读性比较差,再加上对语言本身的不熟悉,导致上手新业务的成本比较高,因此需要系统性的学习一下python的基础知识,包括web框架、数据库操作、队列操作(rabbitmq)、并发编程等基础知识,以便于能够快速接手新业务,并进行项目的迭代。
本篇就从web框架+数据库操作开始说起,目标:使用sanic搭建web服务,注册api,并在api中实现对数据库的读、写操作。

1、环境准备
安装sanic:
pip3 install sanic
目前业务使用的数据库包为tortoise,因此必须学它😄😄,安装tortoise:
pip3 install tortoise-orm
2、搭建webserver
首先创建代码目录结构,用于存放不同业务逻辑的代码:
server.py:主程序文件。
models:与数据库进行交互的业务代码。
controllers:注册路由。本次还暂时用不到这个目录,因为本次路由注册直接放到server.py文件中了。
sanic官方说明文档:
https://sanic.dev/en/guide/getting-started.html#getting-started
首先创建应用实例,注册路由(必须注册一个路由),启动server:
from sanic import Sanic
from sanic.response import text, json
app = Sanic("MySanicApp")
@app.get("/sanic")
async def hello_world(request):
resp = {
"message": "hello world!",
"status": "success",
}
return json(resp)
if __name__ == "__main__":
app.run()
以上就是一个最简单的server,在app.run函数中,没有设定host以及port,host默认为localhost,port默认8000。
注册一个路由,为get请求,请求路径为:localhost:8000/sanic,返回为一个json。
启动server:
请求api:
3、增加对数据库的访问
参考文档:
https://tortoise.github.io/examples/sanic.html
https://tortoise.github.io/databases.html
访问数据库我们选用的包为:tortoise,第一步需要将tortoise注册到sanic框架中:
到这一步,运行代码时,如果是自己安装的mysql,可能会遇到连接mysql失败的问题,可以按如下方法解决:
CREATE USER 'sanic'@'%' IDENTIFIED BY 'sanic123';
GRANT ALL PRIVILEGES ON *.* TO 'sanic'@'%';
FLUSH PRIVILEGES;
修改mysql配置文件中如下选项:
bind-address = 0.0.0.0 # 监听所有网络接口
之后,重启mysql:
sudo systemctl restart mysql
启动服务:
至此,mysql连接成功。
4、测试,读写mysql
假设我们要创建一个user表,包含四个字段:id、name、age、full_ame、grade五个字段,对应model定义如下:
from tortoise.models import Model
from tortoise import fields
class User(Model):
id = fields.IntField(pk=True)
name = fields.CharField(max_length=255)
age = fields.IntField()
full_name = fields.TextField()
grade = fields.CharField(max_length=255)
class Meta:
table = "user"
启动sanic,这时会自动创建表【user】,编写两个http api,一个用来写入数据到mysql,另一个用来读取表数据:
调用create_user,创建一条记录:
调用获取列表api,获取数据库中数据详情:
ok,数据读取成功。
全部的示例代码在这里,需要的同学可以自取:
https://github.com/liupengh3c/career/tree/main/python/web_sanic
这样一个mvp版本的python服务就搭建完成了,从这份代码也可以看出路由注册、数据模型管理多了之后还是很不方便的,后续我们介绍一下对于更多的路由、模型如何进行编写和管理,而且代码的结构、逻辑也不会很负复杂。
欢迎各路同学、小伙伴们关注交流~~~~~~~~~~~~~~~~~~~~。
欢迎各位热爱编程、热爱学习的小伙伴关注微信公众号沟通、讨论技术问题~~~~。