来源:Python 技术「ID: pythonall」 数据库的重要性不言而喻,但是数据库操作起来却不容易,需要用到各种管理工具,各种不同的连接方式,如果有方便的,屏蔽不同数据库细节的工具该多好,功夫不负有心人,我还真找了这样一个工具,不仅支持多种数据库,更厉害的是,不用为适配写一行代码,来了解下吧 神器出场今天的主角是 sandman2 可以基于已存在的数据库,自动生成一个 RESTful API 服务器,而不需要写任何代码,用作者的话说,简单地就像给食物加点盐 更厉害的是,从简单地 SQLite 数据库,到大型的商业数据 PostgreSQL, 都能完美支持,且不用写一行代码 目前支持的数据库:
这让我想起了曾经因为找不到合适的数据库框架手忙脚乱的日子,如果早点知道 sandman2 就好了 之所以叫 sandman2,是因为它的前辈是 sandman,sandman 已经有了很强的数据库支持能力,不过在 SQLAlchemy 0.9 版本中,增加了 使用 pip 安装 安装成功后,就可以得到一个 不用写一行代码,直接启动: sandman2ctl sqlite+pysqlite:///data.db
启动之后,默认端口是 5000,访问地址是 数据库连接前面已经看到连接 SQLite 数据的方法 sandman2 是基于 SQLAlchemy 的,所以使用连接 Url 来连接数据库 格式为
以 mysql 数据库为例: sandman2ctl 'mysql+pymysql://bob:bobpasswd@localhost:3306/testdb'
其他数据库的连接方式可参考 SQLAlchemy 的 控制台需要快速预览数据,对数据进行简单调整的话,控制台很有用 左侧菜单除了 Home 外,其他的都是库表名称 点击相应库表名称,会在右侧显示表内数据,并且可以做增删改操作 点击新增,打开新增页面: 用过 Django 的同学会感觉很熟悉,不过字段并没有类型支持,只能以字符串输入,自行确保数据类型正确,否则保存时会收到错误信息 点击记录前面的笔状图标,会进入编辑页面 点击记录前的删除图标,来删除记录 另外多选数据后,可以通过 控制台方便易用,适合一些简单的、数据量少的操作
API以 RESTful 的角度来看,库表相当于
查询通过 Http GET 方法,以 JSON 格式将数据返回,例如返回 $ curl http://localhost:5000/student/
{"resources":[{"age":18,"class":"1","id":1,"name":"\u5f20\u4e09","profile":"\u64c5\u957f\u5b66\u4e60"},...
通过参数 $ curl http://localhost:5000/student/?page=1 {"resources":[{"age":18,"class":"1"... 通过参数 如果要获取具体记录,可以用主键值作为节段,例如获取 id 为 3 的学生记录 $ curl http://localhost:5000/student/3 {"age":18,"class":"2","id":3,"name":"\u738b\u4e94","profile":"\u7231\u7f16\u7a0b"} 以字段名做参数,相当于查询条件,例如,查询 $ 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"}]} 修改
$ 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"}
$ 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"}
$ curl -X DELETE -H "Content-Type: application/json" http://127.0.0.1:5000/student/8 其他接口获取表的字段定义信息,通过 $ 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)"} 导出数据,通过查询字段 $ 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 做前台框架等 给我们提供便利的同时,展示了技术组合的强大,使得我们对一些细小知识点的学习不会再感到枯燥无味 可以回复关键字,下载示例代码,实践起来更方便 参考
|
|