Python內置庫SQlite3使用指南

若是你是軟件開發人員,相信你必定知道或者曾經使用過一個很是輕量級的數據庫——SQLite。它具備做爲關係數據庫所需的幾乎全部功能,可是這個數據庫把全部功能都保存在一個文件中。在其官方網站上,SQLite的主要應用場景包括:html

  • 嵌入式設備和物聯網
  • 數據分析
  • 數據傳輸
  • 文件存檔或數據容器
  • 內部或臨時數據庫
  • 在演示或測試期間替代企業數據庫
  • 教育、培訓和測試
  • 實驗性SQL語言擴展

固然,SQLite還有不少其餘功能,在此不一一列舉,感興趣的同窗能夠去看官方文檔:https://www.sqlite.org/whentouse.htmlsql

最重要的是,SQLite其實是做爲Python庫內置的。換言之,你不須要安裝任何服務器端/客戶端軟件,也不須要運行某個服務,只要你在Python中導入庫並開始編程,那麼你就有了一個關係數據庫管理系統!數據庫

導入和使用

這裏咱們說「內置」的意思就是,你甚至不須要運行 pip install ,就能獲取庫。只須要經過如下方式導入:編程

import sqlite3 as sl

1.建立與數據庫的鏈接

咱們根本不須要爲驅動程序、鏈接字符串等煩惱。能夠直接建立一個 SQLite 數據庫,並擁有一個簡單的鏈接對象:服務器

con = sl.connect('my-test.db')

運行此行代碼後,咱們就已經建立並鏈接到該數據庫上。 若是要求Python鏈接的數據庫不存在,它就會自動幫咱們建立一個空數據庫。 若是咱們已經建立了數據庫,就能用上面徹底相同的代碼鏈接到現有數據庫。運維

2.建立表格

接下來,咱們先建立一個表格。oop

with con: 
    con.execute(""" 
        CREATE TABLE USER ( 
            id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
            name TEXT, 
            age INTEGER 
        ); 
    """)

在這個 USER 表中,咱們添加了三列。正如咱們所看到的,SQLite 確實是輕量級的,可是它支持常規 RDBMS 應該具備的全部基本特性,例如數據類型、可爲null、主鍵和自動遞增。測試

運行這段代碼以後,咱們就已經建立好了一個表,儘管它什麼都沒有輸出。大數據

3.插入記錄

讓咱們在剛剛建立的 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)

在運行代碼以後,沒有報錯,那就是成功的。

4.查詢表格

接下來,咱們經過實際的方式來驗證咱們所作的一切,經過查詢表格來獲取示例行。

with con: 
    data = con.execute("SELECT * FROM USER WHERE age <= 22") 
    for row in data: 
        print(row)

你能夠看到,很簡單就獲得告終果。

此外,儘管 SQLite 是輕量級的,可是做爲一個普遍使用的數據庫,大多數SQL客戶端軟件都支持使用它。

我本身用得最多的是 DBeaver,接下來給你們介紹一下。

5.從SQL客戶端(DBeaver)鏈接到SQLite數據庫

由於我用的是 googlecolab,因此我要將 my-test.db 文件下載到個人本地計算機上。固然,你也能夠直接在你的電腦上使用 Python 數據庫鏈接你的本地數據庫。

在 DBeaver 中,建立一個新鏈接並選擇 SQLite 做爲數據庫類型。

而後,瀏覽DB文件。

如今你能夠在數據庫上運行任何SQL查詢,看看它與其餘常規關係數據庫有什麼不一樣。

與Pandas無縫鏈接

你覺得就只有這些?不,事實上,做爲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 運維實戰手冊

相關文章
相關標籤/搜索