一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

不用一行代碼,用 API 操作數(shù)據(jù)庫,你信嗎

 Python技術(shù) 2021-06-17

來源: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ù)庫:

  • MySQL
  • PostgreSQL
  • Oracle
  • Microsoft SQL Server
  • SQLite
  • Sybase
  • Drizzle
  • Firebird

這讓我想起了曾經(jīng)因為找不到合適的數(shù)據(jù)庫框架手忙腳亂的日子,如果早點知道 sandman2 就好了

之所以叫 sandman2,是因為它的前輩是 sandman,sandman 已經(jīng)有了很強的數(shù)據(jù)庫支持能力,不過在 SQLAlchemy 0.9 版本中,增加了 automap 功能,可以進一步使 sandman 得到簡化,于是重寫了 sandman,就有了 sandman2,并且 sandman2 的功能遠超 sandman

使用 pip 安裝 pip install sandman2

安裝成功后,就可以得到一個 sandman2ctl 命令行工具,用它來啟動一個 RESTful API 服務(wù)器

不用寫一行代碼,直接啟動:

sandman2ctl sqlite+pysqlite:///data.db

注意:如果用的 python 版本是 3.8 及以上,且在 Windows 上,執(zhí)行時可能會遇到,AttributeError: module 'time' has no attribute 'clock' 的錯誤 這是因為 3.8 以后 time 模塊的 clock 屬性換成了 perf_counter() 方法,所以需要修改下 lib\site-packages\sqlalchemy\util\compat.py 的 331 行,將 time_func = time.clock 換成 time_func = time.perf_counter() 保存即可

啟動之后,默認端口是 5000,訪問地址是 http://localhost:5000/admin 就能看到服務(wù)器控制臺了

數(shù)據(jù)庫連接

前面已經(jīng)看到連接 SQLite 數(shù)據(jù)的方法

sandman2 是基于 SQLAlchemy 的,所以使用連接 Url 來連接數(shù)據(jù)庫

格式為

dialect+driver://username:password@host:port/database

  • dialect 為數(shù)據(jù)庫類型,如 mysql、SQLite 等
  • driver 為數(shù)據(jù)庫驅(qū)動模塊名,例如 pymysql、psycopg2、mysqldb 等,如果忽略,表示使用默認驅(qū)動

以 mysql 數(shù)據(jù)庫為例:

sandman2ctl 'mysql+pymysql://bob:bobpasswd@localhost:3306/testdb'

如果環(huán)境中沒有安裝 pymysql 模塊,必須先安裝,才能正常啟動

其他數(shù)據(jù)庫的連接方式可參考 SQLAlchemy 的 引擎配置 章節(jié), 在這里查看 https://docs./en/13/core/engines.html

控制臺

需要快速預(yù)覽數(shù)據(jù),對數(shù)據(jù)進行簡單調(diào)整的話,控制臺很有用

左側(cè)菜單除了 Home 外,其他的都是庫表名稱

點擊相應(yīng)庫表名稱,會在右側(cè)顯示表內(nèi)數(shù)據(jù),并且可以做增刪改操作

庫表數(shù)據(jù)

點擊新增,打開新增頁面:

新增頁面

用過 Django 的同學(xué)會感覺很熟悉,不過字段并沒有類型支持,只能以字符串輸入,自行確保數(shù)據(jù)類型正確,否則保存時會收到錯誤信息

點擊記錄前面的筆狀圖標,會進入編輯頁面

編輯頁面

點擊記錄前的刪除圖標,來刪除記錄

另外多選數(shù)據(jù)后,可以通過 With selected 菜單下的 Delete 按鈕來批量刪除

控制臺方便易用,適合一些簡單的、數(shù)據(jù)量少的操作

注意:由于控制臺不能登錄即可訪問,建議將服務(wù)器創(chuàng)建在本地或內(nèi)網(wǎng)環(huán)境中

API

以 RESTful 的角度來看,庫表相當于資源(resource),一組資源相當于集合(collection)

以下測驗,均采用 curl 工具進行,具體用法可參考 阮一峰的 《curl 的用法指南》(http://www./blog/2019/09/curl-reference.html)

查詢

通過 Http GET 方法,以 JSON 格式將數(shù)據(jù)返回,例如返回 學(xué)生表 student 的所有記錄:

$ curl http://localhost:5000/student/
{"resources":[{"age":18,"class":"1","id":1,"name":"\u5f20\u4e09","profile":"\u64c5\u957f\u5b66\u4e60"},...

注意:資源要以 / 結(jié)尾

通過參數(shù) page 來分頁,例如返回 學(xué)生表 student 的第一頁數(shù)據(jù)

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

通過參數(shù) limit 顯示返回行數(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ù),相當于查詢條件,例如,查詢 name 為 Tom 的學(xué)生記錄:

$ 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"}]}

修改

POST 方法用于新增,新增內(nèi)容,由請求的數(shù)據(jù)部分提供,例如增加一個學(xué)生信息:

$ 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 方法用于更新,更新內(nèi)容,由請求的數(shù)據(jù)部分提供,例如將 id 為 1 的學(xué)生班級更改為 3

注意: 更新時主鍵信息通過 url 的主鍵值節(jié)段提供,而不在數(shù)據(jù)部分中

$ 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 的學(xué)生記錄:

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

其他接口

獲取表的字段定義信息,通過 meta 節(jié)段獲取,例如獲取 學(xué)生表 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)"}

導(dǎo)出數(shù)據(jù),通過查詢字段 export 獲取,數(shù)據(jù)格式為 csv,例如導(dǎo)出學(xué)生數(shù)據(jù),存放到 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 Speed100 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)鍵字,下載示例代碼,實踐起來更方便

參考

  • https://www.cnblogs.com/Liu-Hui/p/13388194.html
  • https://sandman2./en/latest/
  • http://www./blog/2019/09/curl-reference.html


    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲中文字幕人妻系列| 偷拍洗澡一区二区三区| 午夜国产成人福利视频| 欧美日韩亚洲国产精品| 国产成人精品综合久久久看| 美女被啪的视频在线观看| 黄片在线观看一区二区三区| 欧美精品久久一二三区| 国产精品国三级国产专不卡| 内射精子视频欧美一区二区| 亚洲欧美日韩中文字幕二欧美| 不卡一区二区高清视频| 开心五月激情综合婷婷色| 天海翼精品久久中文字幕 | 色哟哟哟在线观看视频| 国产日产欧美精品大秀| 中文字幕日韩欧美亚洲午夜| 国产福利一区二区三区四区| 成人免费观看视频免费| 欧美黄色黑人一区二区| 91后入中出内射在线| av在线免费观看在线免费观看| 超薄丝袜足一区二区三区| 91日韩在线观看你懂的| 亚洲夫妻性生活免费视频| 日本最新不卡免费一区二区| 精品国产品国语在线不卡| 久久国产亚洲精品赲碰热| 一区二区日韩欧美精品| 日本最新不卡免费一区二区| 中文字幕有码视频熟女| 日韩性生活片免费观看| 国产欧美日韩精品一区二区| 欧洲日本亚洲一区二区| 午夜福利92在线观看| 日韩一区二区三区高清在| 亚洲二区欧美一区二区| 国产又粗又猛又爽色噜噜| 亚洲中文字幕亲近伦片| 人妻内射精品一区二区| 五月天婷亚洲天婷综合网|