
如果你是軟體開發人員,相信你一定知道甚至曾經使用過一個非常輕量級的資料庫——SQLite。它幾乎擁有作為一個關係資料庫所需的所有功能,而且這些有功能都保存在一個文件中。下面是一些官方網站顯示可以使用SQLite的場景:
· 嵌入式設備和物聯網
· 數據分析
· 數據傳輸
· 文件歸檔和/或數據容器
· 內部或臨時資料庫
· 在演示或測試期間代表企業資料庫
· 教育、培訓和測試
· 實驗性SQL語言擴展
最重要的是,SQLite實際上是作為Python的內置庫,換言之,你不需要安裝任何伺服器端/客戶端軟體,也不需要讓某個東西作為服務運行,只要你用Python導入庫並開始編碼,就會有一個關係資料庫管理系統!

輸入與使用

當我們說「內置」時,這意味著你甚至不需要運行pip install來獲取庫。只需通過以下方式導入:
import sqlite3 as sl創建到資料庫的連接
不要為驅動程序、連接字元串等煩惱。可以創建一個SQLite資料庫,並擁有一個簡單的連接對象:
con = sl.connect('my-test.db')運行這行代碼之後,我們已經創建了資料庫並連接到它。我們要求Python自動連接現有的資料庫,因此它不是空的。否則,我們可以使用完全相同的代碼連接到現有資料庫。

創建表
然後創建一個表:
with con:
con.execute("""
CREATE TABLE USER (
id INTEGER NOT NULL PRIMARYKEY AUTOINCREMENT,
name TEXT,
age INTEGER
);
""")在這個用戶表中添加三列。正如你所看到的,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。

從SQL客戶端(DBeaver)連接到SQLite資料庫
因為我用的是googlecolab,所以要下載- my-test.db測試資料庫文件到本地計算機。在本例中,如果在本地計算機上運行Python,則可以使用SQL客戶機直接連接到資料庫文件。
在DBeaver中,創建一個新連接並選擇SQLite作為DB type。

然後,瀏覽到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內置庫sqlite3在SQLite資料庫中創建和操作表。當然,它也支持更新和刪除,你可以自己嘗試一下。
最重要的是,我們可以輕鬆地將表從SQLite資料庫讀入Pandas數據幀,反之亦然。這使我們能夠更容易地與輕量級關係資料庫進行交互。此外,SQLite沒有身份驗證,因為一切都需要是輕量級的。

圖源:unsplash
Python中隱藏著許多驚喜。它們並不是故意藏起來,只是因為Python中存在太多現成的特性以至於人們無法發現。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/284443.html
微信掃一掃
支付寶掃一掃