如果你是軟體開發人員,相信你一定知道或者曾經使用過一個非常輕量級的資料庫——SQLite。它具有作為關係資料庫所需的幾乎所有功能,但是這個資料庫把所有功能都儲存在一個檔案中。在其官方網站上,SQLite的主要應用場景包括:
嵌入式裝置和物聯網
資料分析
資料傳輸
檔案存檔或資料容器
內部或臨時資料庫
在演示或測試期間替代企業資料庫
教育、培訓和測試
實驗性SQL語言擴充套件
當然,SQLite還有很多其他功能,在此不一一列舉,感興趣的同學可以去看官方文件:
https://www。
sqlite。org/whentouse。ht
ml
最重要的是,
SQLite實際上是作為Python庫內建的。
換言之,你不需要安裝任何伺服器端/客戶端軟體,也不需要執行某個服務,只要你在Python中匯入庫並開始程式設計,那麼你就有了一個關係資料庫管理系統!
匯入和使用
這裡我們說“內建”的意思就是,你甚至不需要執行 pip install ,就能獲取庫。只需要透過以下方式匯入:
import sqlite3 as sl
1.建立與資料庫的連線
我們根本不需要為驅動程式、連線字串等煩惱。可以直接建立一個 SQLite 資料庫,並擁有一個簡單的連線物件:
con = sl。connect(‘my-test。db’)
執行此行程式碼後,我們就已經建立並連線到該資料庫上。 如果要求Python連線的資料庫不存在,它就會自動幫我們建立一個空資料庫。 如果我們已經建立了資料庫,就能用上面完全相同的程式碼連線到現有資料庫。
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)
你可以看到,很簡單就得到了結果。
此外,儘管 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中更多令人驚訝的特性吧!
--END--
作者:Christopher Tao
原文連結:
https://
towardsdatascience。com/
do-you-know-python-has-a-built-in-database-d553989c87bd
編譯:未艾資訊(
http://www。
weainfo。net
)
喜歡本文的同學記得轉發+點贊~
更多內容,歡迎大家關注我們的公眾號:
為AI吶喊(weainahan)