Python內(nèi)置數(shù)據(jù)庫:輕量級SQLite
Python是一種流行的編程語言,可以用于開發(fā)各種應(yīng)用程序,從圖形用戶界面到網(wǎng)站和游戲。Python的一個特點(diǎn)是,它內(nèi)置了一個輕量級的關(guān)系型數(shù)據(jù)庫SQLite,它可以提供快速、簡單的數(shù)據(jù)存儲和檢索。本篇博客將介紹Python內(nèi)置數(shù)據(jù)庫SQLite的特點(diǎn)、用法和一些實(shí)用技巧,幫助讀者更好地利用它來構(gòu)建全面的應(yīng)用程序。
1. 初識SQLite
SQLite是一個輕量級的數(shù)據(jù)庫,它不需要單獨(dú)的服務(wù)器進(jìn)程,可以直接嵌入到Python程序中。Python內(nèi)置了對SQLite的支持,內(nèi)置庫不需要安裝,我們可以通過SQLite3模塊來使用SQLite數(shù)據(jù)庫。
SQLite數(shù)據(jù)庫使用的.db文件是一種數(shù)據(jù)庫文件,屬于二進(jìn)制文件類型。它是由SQLite引擎創(chuàng)建和管理的,用于存儲和管理數(shù)據(jù)。SQLite數(shù)據(jù)庫文件包含了表格、行和列等結(jié)構(gòu)化數(shù)據(jù),并提供了對這些數(shù)據(jù)的讀取、寫入和查詢等功能。
SQLite數(shù)據(jù)庫文件的特點(diǎn)如下:
- 單個文件:SQLite數(shù)據(jù)庫通常由單個.db文件組成,包含了所有的表格和數(shù)據(jù),沒有額外的配置文件或目錄。
- 壓縮格式:SQLite數(shù)據(jù)庫文件使用了一種專有的壓縮格式,可以有效地壓縮和存儲大量的數(shù)據(jù)。
- 跨平臺可移植性:SQLite數(shù)據(jù)庫文件可以在不同的操作系統(tǒng)上進(jìn)行共享和使用,包括Windows、Linux、Mac等。
- 零配置:創(chuàng)建和使用SQLite數(shù)據(jù)庫文件通常不需要進(jìn)行任何額外的配置或服務(wù)器設(shè)置,只需使用合適的庫或工具即可。
由于SQLite數(shù)據(jù)庫文件是二進(jìn)制格式,并且具有一定的文件結(jié)構(gòu)和格式,所以通常需要使用專門的SQLite數(shù)據(jù)庫引擎或相關(guān)的工具才能正確地讀取、寫入和操作這些文件。
2.牛刀小試
import sqlite3
# 連接到數(shù)據(jù)庫
conn = sqlite3.connect('example.db')
# 創(chuàng)建一個游標(biāo)對象
cursor = conn.cursor()
# 執(zhí)行一個查詢
cursor.execute('SELECT SQLITE_VERSION()')
# 打印查詢結(jié)果
data = cursor.fetchone()
print("SQLite version:", data)
# SQLite version: ('3.40.1',)
# 關(guān)閉連接
conn.close()
3. Sqlite的增刪改查
以下是一個簡單的SQLite使用示例:
import sqlite3
# 連接到數(shù)據(jù)庫
conn = sqlite3.connect('user.db')
# 創(chuàng)建一個游標(biāo)對象
cursor = conn.cursor()
# 創(chuàng)建表格
# 創(chuàng)建一個名為students的表,包含id、name和age三個字段
cursor.execute('''CREATE TABLE students (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')
# cursor.execute('''CREATE TABLE stocks
# (date text, trans text, symbol text, qty real, price real)''')
# 插入數(shù)據(jù)
# 向students表中插入一條數(shù)據(jù)
cursor.execute("INSERT INTO students (name, age) VALUES ('張三', 20)")
# cursor.execute("INSERT INTO stocks VALUES ('2022-10-28', 'BUY', 'GOOG', 100, 490.1)")
# 保存更改
conn.commit()
# 關(guān)閉連接
conn.close()
在上述例子中,我們新建了一張表,并且插入了一條數(shù)據(jù),但是我們一般是打不開這個文件的,需要借助插件來查看數(shù)據(jù)文件;這個時候需要安裝一個插件:
SQLite3 Editor
如下所示:
然后就可以預(yù)覽剛才數(shù)據(jù)的操作:
建表完成之后就可以進(jìn)行數(shù)據(jù)的增刪改查。
(1) 查詢數(shù)據(jù)
import sqlite3
# 連接到數(shù)據(jù)庫
conn = sqlite3.connect('user.db')
# 創(chuàng)建一個游標(biāo)對象
cursor = conn.cursor()
# 查詢users表中的所有數(shù)據(jù)
cursor.execute("SELECT * FROM students")
rows = cursor.fetchall()
# 打印查詢結(jié)果
for row in rows:
print(row)
# 關(guān)閉連接
conn.close()
# (1, '張三', 20)
(2) 更新數(shù)據(jù)
import sqlite3
# 連接到數(shù)據(jù)庫
conn = sqlite3.connect('user.db')
# 創(chuàng)建一個游標(biāo)對象
cursor = conn.cursor()
# 更新users表中id為1的數(shù)據(jù)的name字段為'李四'
cursor.execute("UPDATE students SET name=? WHERE id=?", ('李四', 1))
# 查詢users表中的所有數(shù)據(jù)
cursor.execute("SELECT * FROM students")
rows = cursor.fetchall()
# 打印查詢結(jié)果
for row in rows:
print(row)
# 關(guān)閉連接
conn.close()
# (1, '李四', 20)
(3) 刪除數(shù)據(jù)
import sqlite3
# 連接到數(shù)據(jù)庫
conn = sqlite3.connect('example.db')
# 創(chuàng)建一個游標(biāo)對象
cursor = conn.cursor()
# 刪除users表中id為1的數(shù)據(jù)
cursor.execute("DELETE FROM students WHERE id=?", (1,))
# 提交更改并關(guān)閉連接
conn.commit()
conn.close()
(4) 提交事務(wù)
conn.commit()
(5) 關(guān)閉游標(biāo)和連接
cursor.close()
conn.close()
總結(jié)
Python內(nèi)置的SQLite數(shù)據(jù)庫具有自包含、跨平臺、無服務(wù)器和易于使用的特點(diǎn),可以幫助開發(fā)人員快速創(chuàng)建和維護(hù)小型數(shù)據(jù)庫應(yīng)用。此外,Python語言自身也提供了豐富的模塊和庫,可以與SQLite無縫協(xié)作,非常方便。在此基礎(chǔ)上,我們可以嘗試更高級的數(shù)據(jù)庫技術(shù),如ORM(對象關(guān)系映射)、數(shù)據(jù)庫遷移和分布式系統(tǒng)構(gòu)建等。相信有了這篇博客的幫助,您對Python內(nèi)置的SQLite會有更深入的了解并深受裨益。