來源:Python 技術(shù)「ID: pythonall」 數(shù)據(jù)庫的重要性不言而喻,但是數(shù)據(jù)庫操作起來卻不容易,需要用到各種管理工具,各種不同的連接方式,如果有方便的,屏蔽不同數(shù)據(jù)庫細節(jié)的工具該多好,功夫不負有心人,我還真找了這樣一個工具,不僅支持多種數(shù)據(jù)庫,更厲害的是,不用為適配寫一行代碼,來了解下吧 神器出場今天的主角是 sandman2 可以基于已存在的數(shù)據(jù)庫,自動生成一個 RESTful API 服務(wù)器,而不需要寫任何代碼,用作者的話說,簡單地就像給食物加點鹽 更厲害的是,從簡單地 SQLite 數(shù)據(jù)庫,到大型的商業(yè)數(shù)據(jù) PostgreSQL, 都能完美支持,且不用寫一行代碼 目前支持的數(shù)據(jù)庫:
這讓我想起了曾經(jīng)因為找不到合適的數(shù)據(jù)庫框架手忙腳亂的日子,如果早點知道 sandman2 就好了 之所以叫 sandman2,是因為它的前輩是 sandman,sandman 已經(jīng)有了很強的數(shù)據(jù)庫支持能力,不過在 SQLAlchemy 0.9 版本中,增加了 使用 pip 安裝 安裝成功后,就可以得到一個 不用寫一行代碼,直接啟動: sandman2ctl sqlite+pysqlite:///data.db
啟動之后,默認端口是 5000,訪問地址是 數(shù)據(jù)庫連接前面已經(jīng)看到連接 SQLite 數(shù)據(jù)的方法 sandman2 是基于 SQLAlchemy 的,所以使用連接 Url 來連接數(shù)據(jù)庫 格式為
以 mysql 數(shù)據(jù)庫為例: sandman2ctl 'mysql+pymysql://bob:bobpasswd@localhost:3306/testdb'
其他數(shù)據(jù)庫的連接方式可參考 SQLAlchemy 的 控制臺需要快速預(yù)覽數(shù)據(jù),對數(shù)據(jù)進行簡單調(diào)整的話,控制臺很有用 左側(cè)菜單除了 Home 外,其他的都是庫表名稱 點擊相應(yīng)庫表名稱,會在右側(cè)顯示表內(nèi)數(shù)據(jù),并且可以做增刪改操作 點擊新增,打開新增頁面: 用過 Django 的同學(xué)會感覺很熟悉,不過字段并沒有類型支持,只能以字符串輸入,自行確保數(shù)據(jù)類型正確,否則保存時會收到錯誤信息 點擊記錄前面的筆狀圖標,會進入編輯頁面 點擊記錄前的刪除圖標,來刪除記錄 另外多選數(shù)據(jù)后,可以通過 控制臺方便易用,適合一些簡單的、數(shù)據(jù)量少的操作
API以 RESTful 的角度來看,庫表相當于
查詢通過 Http GET 方法,以 JSON 格式將數(shù)據(jù)返回,例如返回 $ curl http://localhost:5000/student/
{"resources":[{"age":18,"class":"1","id":1,"name":"\u5f20\u4e09","profile":"\u64c5\u957f\u5b66\u4e60"},...
通過參數(shù) $ curl http://localhost:5000/student/?page=1 {"resources":[{"age":18,"class":"1"... 通過參數(shù) 如果要獲取具體記錄,可以用主鍵值作為節(jié)段,例如獲取 id 為 3 的學(xué)生記錄 $ curl http://localhost:5000/student/3 {"age":18,"class":"2","id":3,"name":"\u738b\u4e94","profile":"\u7231\u7f16\u7a0b"} 以字段名做參數(shù),相當于查詢條件,例如,查詢 $ curl http://localhost:5000/student/?name=Tom {"resources":[{"age":19,"class":"1","id":7,"name":"Tom","profile":"Handsome"}]} 查詢條件可以被組合,例如,查詢班級為 1 年齡為 18 的學(xué)生: $ 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)"} 導(dǎo)出數(shù)據(jù),通過查詢字段 $ 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 還有更多的接口有待你的探索 部署服務(wù)sandman2 的服務(wù)器是基于 Flask 的 前面的 Python 100 天文章中對 Flask 和 服務(wù)器部署有詳細的說明 具體可參考,《Web 開發(fā) Flask 簡介》,以及《部署 Flask 應(yīng)用》 在此就不贅述了 總結(jié)sandman2 之所以簡單易用,是因組合了很多應(yīng)用和技術(shù),SQLAlchemy 做 ORM 層,F(xiàn)lask 做 RESTful 服務(wù)器,Bootstrap 做前臺框架等 給我們提供便利的同時,展示了技術(shù)組合的強大,使得我們對一些細小知識點的學(xué)習(xí)不會再感到枯燥無味 可以回復(fù)關(guān)鍵字,下載示例代碼,實踐起來更方便 參考
|
|
來自: Python技術(shù) > 《待分類》