不用一行代码,用 API 操作数据库,你信吗(下)

API

以 RESTful 的角度来看,库表相当于资源(resource),一组资源相当于集合(collection)

以下测验,均采用 curl 工具进行,具体用法可参考 阮一峰的 《curl 的用法指南》(http://www.ruanyifeng.com/blog/2019/09/curl-reference.html)

查询

通过 Http GET 方法,以 JSON 格式将数据返回,例如返回 学生表 student 的所有记录:

$ curl http://localhost:5000/student/

{"resources":[{"age":18,"class":"1","id":1,"name":"\u5f20\u4e09","profile":"\u64c5\u957f\u5b66\u4e60"},...

注意:资源要以 / 结尾

通过参数 page 来分页,例如返回 学生表 student 的第一页数据

$ curl http://localhost:5000/student/?page=1
{"resources":[{"age":18,"class":"1"...

通过参数 limit 显示返回行数

如果要获取具体记录,可以用主键值作为节段,例如获取 id 为 3 的学生记录

$ curl http://localhost:5000/student/3
{"age":18,"class":"2","id":3,"name":"\u738b\u4e94","profile":"\u7231\u7f16\u7a0b"}

以字段名做参数,相当于查询条件,例如,查询 name 为 Tom 的学生记录:

$ curl http://localhost:5000/student/?name=Tom
{"resources":[{"age":19,"class":"1","id":7,"name":"Tom","profile":"Handsome"}]}

查询条件可以被组合,例如,查询班级为 1 年龄为 18 的学生:

$ curl http://localhost:5000/student/?class=1&age=19
{"resources":[{"age":19,"class":"1","id":2,"name":"\u674e\u56db","profile":"\u559c\u6b22\u7bee\u7403"},{"age":19,"class":"1","id":7,"name":"Tom","profile":"Handsome"}]}

修改

POST 方法用于新增,新增内容,由请求的数据部分提供,例如增加一个学生信息:

$ curl -X POST -d '{"name": "Lily", "age": 17, "class":1, "profile":"Likely"}' -H "Content-Type: application/json" http://127.0.0.1:5000/student/
{"age":17,"class":"1","id":8,"name":"Lily","profile":"Likely"}

注意:库表主键是自增长的,可以忽略主键字段,否则必须提供

PATCH 方法用于更新,更新内容,由请求的数据部分提供,例如将 id 为 1 的学生班级更改为 3

注意: 更新时主键信息通过 url 的主键值节段提供,而不在数据部分中

$ curl -X PATCH -d '{"class":3}' -H "Content-Type: application/json" http://127.0.0.1:5000/student/1
{"age":18,"class":"3","id":1,"name":"\u5f20\u4e09","profile":"\u64c5\u957f\u5b66\u4e60"}

DELETE 方法由于删除,例如删除 id 为 8 的学生记录:

$ curl -X DELETE -H "Content-Type: application/json" http://127.0.0.1:5000/student/8

其他接口

获取表的字段定义信息,通过 meta 节段获取,例如获取 学生表 student 的字段定义:

$ curl http://127.0.0.1:5000/student/meta
{"age":"INTEGER(11)","class":"VARCHAR(255)","id":"INTEGER(11) (required)","name":"VARCHAR(255)","profile":"VARCHAR(500)"}

导出数据,通过查询字段 export 获取,数据格式为 csv,例如导出学生数据,存放到 student.csv 文件中:

$ curl -o student.csv http://127.0.0.1:5000/student/?export
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   202  100   202    0     0   2525      0 --:--:-- --:--:-- --:--:--  2525

还有更多的接口有待你的探索

部署服务

sandman2 的服务器是基于 Flask 的

前面的 Python 100 天文章中对 Flask 和 服务器部署有详细的说明

具体可参考,《Web 开发 Flask 简介》,以及《部署 Flask 应用

在此就不赘述了

总结

sandman2 之所以简单易用,是因组合了很多应用和技术,SQLAlchemy 做 ORM 层,Flask 做 RESTful 服务器,Bootstrap 做前台框架等

给我们提供便利的同时,展示了技术组合的强大,使得我们对一些细小知识点的学习不会再感到枯燥无味

可以回复关键字,下载示例代码,实践起来更方便

上一篇:(键盘)代码 19:由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备 解决方法


下一篇:包装对象|学习笔记