如果你是軟體開發人員,相信你一定知道或者曾經使用過一個非常輕量級的資料庫——SQLite。它具有作為關係資料庫所需的幾乎所有功能,但是這個資料庫把所有功能都儲存在一個檔案中。在其官方網站上,SQLite的主要應用場景包括:

嵌入式裝置和物聯網

資料分析

資料傳輸

檔案存檔或資料容器

內部或臨時資料庫

在演示或測試期間替代企業資料庫

教育、培訓和測試

實驗性SQL語言擴充套件

當然,SQLite還有很多其他功能,在此不一一列舉,感興趣的同學可以去看官方文件:

https://www。

sqlite。org/whentouse。ht

ml

最重要的是,

SQLite實際上是作為Python庫內建的。

換言之,你不需要安裝任何伺服器端/客戶端軟體,也不需要執行某個服務,只要你在Python中匯入庫並開始程式設計,那麼你就有了一個關係資料庫管理系統!

匯入和使用

你知道Python有內建資料庫嗎?Python內建庫SQlite3使用指南

這裡我們說“內建”的意思就是,你甚至不需要執行 pip install ,就能獲取庫。只需要透過以下方式匯入:

import sqlite3 as sl

1.建立與資料庫的連線

我們根本不需要為驅動程式、連線字串等煩惱。可以直接建立一個 SQLite 資料庫,並擁有一個簡單的連線物件:

con = sl。connect(‘my-test。db’)

執行此行程式碼後,我們就已經建立並連線到該資料庫上。 如果要求Python連線的資料庫不存在,它就會自動幫我們建立一個空資料庫。 如果我們已經建立了資料庫,就能用上面完全相同的程式碼連線到現有資料庫。

你知道Python有內建資料庫嗎?Python內建庫SQlite3使用指南

2.建立表格

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

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)

你知道Python有內建資料庫嗎?Python內建庫SQlite3使用指南

你可以看到,很簡單就得到了結果。

此外,儘管 SQLite 是輕量級的,但是作為一個廣泛使用的資料庫,大多數SQL客戶端軟體都支援使用它。

我自己用得最多的是 DBeaver,接下來給大家介紹一下。

5.從SQL客戶端(DBeaver)連線到SQLite資料庫

因為我用的是 googlecolab,所以我要將 my-test。db 檔案下載到我的本地計算機上。當然,你也可以直接在你的電腦上使用 Python 資料庫連線你的本地資料庫。

在 DBeaver 中,建立一個新連線並選擇 SQLite 作為資料庫型別。

你知道Python有內建資料庫嗎?Python內建庫SQlite3使用指南

然後,瀏覽DB檔案。

你知道Python有內建資料庫嗎?Python內建庫SQlite3使用指南

現在你可以在資料庫上執行任何SQL查詢,看看它與其他常規關係資料庫有什麼不同。

你知道Python有內建資料庫嗎?Python內建庫SQlite3使用指南

與Pandas無縫連線

你知道Python有內建資料庫嗎?Python內建庫SQlite3使用指南

你以為就只有這些?不,事實上,作為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’]

})

你知道Python有內建資料庫嗎?Python內建庫SQlite3使用指南

然後,我們可以簡單地呼叫資料幀的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)

你知道Python有內建資料庫嗎?Python內建庫SQlite3使用指南

是不是很厲害?讓我們把結果寫到一個名為USER_SKILL的新表中。

df。to_sql(‘USER_SKILL’, con)

我們也可以用SQL客戶端來檢索表。

你知道Python有內建資料庫嗎?Python內建庫SQlite3使用指南

總結

實際上,Python中還隱藏著很多驚喜。而且這些驚喜並不沒有隱藏起來,只是Python有太多現成可以直接使用的特性了,這就導致很多人無法發現這些特性。

在本文中,我介紹瞭如何使用 Python 內建庫 sqlite3 在 SQLite 資料庫中建立和操作表。它也支援對錶格進行更新和刪除操作,建議大家在看完這篇文章之後自己嘗試一下。

最重要的是,我們可以輕鬆地將表從 SQLite 資料庫讀入 Pandas 資料幀,反之亦然。這使我們能夠更容易地與我們的輕量級關係資料庫進行互動。

你可能會注意到 SQLite 沒有進行身份驗證,這也是它刻意設計的行為,因為需要輕量化。

一起去探索Python中更多令人驚訝的特性吧!

--END--

作者:Christopher Tao

原文連結:

https://

towardsdatascience。com/

do-you-know-python-has-a-built-in-database-d553989c87bd

編譯:未艾資訊(

http://www。

weainfo。net

喜歡本文的同學記得轉發+點贊~

更多內容,歡迎大家關注我們的公眾號:

為AI吶喊(weainahan)