若是你是軟件開發人員,相信你必定知道或者曾經使用過一個很是輕量級的數據庫——SQLite。它具備做爲關係數據庫所需的幾乎全部功能,可是這個數據庫把全部功能都保存在一個文件中。在其官方網站上,SQLite的主要應用場景包括:html
固然,SQLite還有不少其餘功能,在此不一一列舉,感興趣的同窗能夠去看官方文檔:https://www.sqlite.org/whentouse.htmlsql
最重要的是,SQLite其實是做爲Python庫內置的。換言之,你不須要安裝任何服務器端/客戶端軟件,也不須要運行某個服務,只要你在Python中導入庫並開始編程,那麼你就有了一個關係數據庫管理系統!數據庫
這裏咱們說「內置」的意思就是,你甚至不須要運行 pip install ,就能獲取庫。只須要經過如下方式導入:編程
import sqlite3 as sl
咱們根本不須要爲驅動程序、鏈接字符串等煩惱。能夠直接建立一個 SQLite 數據庫,並擁有一個簡單的鏈接對象:服務器
con = sl.connect('my-test.db')
運行此行代碼後,咱們就已經建立並鏈接到該數據庫上。 若是要求Python鏈接的數據庫不存在,它就會自動幫咱們建立一個空數據庫。 若是咱們已經建立了數據庫,就能用上面徹底相同的代碼鏈接到現有數據庫。運維
接下來,咱們先建立一個表格。oop
with con: con.execute(""" CREATE TABLE USER ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER ); """)
在這個 USER 表中,咱們添加了三列。正如咱們所看到的,SQLite 確實是輕量級的,可是它支持常規 RDBMS 應該具備的全部基本特性,例如數據類型、可爲null、主鍵和自動遞增。測試
運行這段代碼以後,咱們就已經建立好了一個表,儘管它什麼都沒有輸出。大數據
讓咱們在剛剛建立的 USER 表中插入數據記錄,這也能夠證實咱們確實建立了它。網站
若是咱們須要一次性插入多個記錄,Python中的SQLite也能很容易地實現這一點。
sql = 'INSERT INTO USER (id, name, age) values(?, ?, ?)' data = [ (1, 'Alice', 21), (2, 'Bob', 22), (3, 'Chris', 23) ]
咱們須要用問號做爲佔位符來定義SQL語句 。接下來就是建立一些要插入的示例數據。使用鏈接對象,就能插入這些示例行。
with con: con.executemany(sql, data)
在運行代碼以後,沒有報錯,那就是成功的。
接下來,咱們經過實際的方式來驗證咱們所作的一切,經過查詢表格來獲取示例行。
with con: data = con.execute("SELECT * FROM USER WHERE age <= 22") for row in data: print(row)
你能夠看到,很簡單就獲得告終果。
此外,儘管 SQLite 是輕量級的,可是做爲一個普遍使用的數據庫,大多數SQL客戶端軟件都支持使用它。
我本身用得最多的是 DBeaver,接下來給你們介紹一下。
由於我用的是 googlecolab,因此我要將 my-test.db 文件下載到個人本地計算機上。固然,你也能夠直接在你的電腦上使用 Python 數據庫鏈接你的本地數據庫。
在 DBeaver 中,建立一個新鏈接並選擇 SQLite 做爲數據庫類型。
而後,瀏覽DB文件。
如今你能夠在數據庫上運行任何SQL查詢,看看它與其餘常規關係數據庫有什麼不一樣。
你覺得就只有這些?不,事實上,做爲Python的一個內置特性,SQLite 能夠與 Pandas 數據幀無縫鏈接。
讓咱們先來定義一個數據幀。
df_skill = pd.DataFrame({ 'user_id': [1,1,2,2,3,3,3], 'skill': ['Network Security', 'Algorithm Development', 'Network Security', 'Java', 'Python', 'Data Science', 'Machine Learning'] })
而後,咱們能夠簡單地調用數據幀的to_sql()方法將其保存到數據庫中。
df_skill.to_sql('SKILL', con)
就這樣咱們甚至不須要預先建立表,列的數據類型和長度都會被推斷出來。固然,若是你想的話,你也能夠先定義。
而後,假設咱們要將表 USER 和 SKILL 鏈接在一塊兒,並將結果讀入Pandas數據框。
df = pd.read_sql(''' SELECT s.user_id, u.name, u.age, s.skill FROM USER u LEFT JOIN SKILL s ON u.id = s.user_id ''', con)
是否是很厲害?讓咱們把結果寫到一個名爲USER_SKILL的新表中。
df.to_sql('USER_SKILL', con)
咱們也能夠用SQL客戶端來檢索表。
實際上,Python中還隱藏着不少驚喜。並且這些驚喜並不沒有隱藏起來,只是Python有太多現成能夠直接使用的特性了,這就致使不少人沒法發現這些特性。
在本文中,我介紹瞭如何使用 Python 內置庫 sqlite3 在 SQLite 數據庫中建立和操做表。它也支持對錶格進行更新和刪除操做,建議你們在看完這篇文章以後本身嘗試一下。
最重要的是,咱們能夠輕鬆地將表從 SQLite 數據庫讀入 Pandas 數據幀,反之亦然。這使咱們可以更容易地與咱們的輕量級關係數據庫進行交互。
你可能會注意到 SQLite 沒有進行身份驗證,這也是它刻意設計的行爲,由於須要輕量化。
一塊兒去探索Python中更多使人驚訝的特性吧!
原文連接:https://developer.51cto.com/art/202007/622645.htm#topx
做者:爲AI吶喊
更多文章和資料|點擊下方文字直達 ↓↓↓
阿里雲K8s實戰手冊
[阿里雲CDN排坑指南]CDN
ECS運維指南
DevOps實踐手冊
Hadoop大數據實戰手冊
Knative雲原生應用開發指南
OSS 運維實戰手冊