SQLite 是一種輕量級(jí)、無服務(wù)器、獨(dú)立的關(guān)系數(shù)據(jù)庫管理系統(tǒng),由于其簡單、高效且占用空間緊湊,在許多應(yīng)用程序中常用。
本綜合指南將探討如何在 Python 項(xiàng)目中充分利用 SQLite 來深入創(chuàng)建、訪問、修改和管理數(shù)據(jù)庫信息。
在 Python 中設(shè)置 SQLite
要在 Python 中使用 SQLite,我們首先需要導(dǎo)入 sqlite3 模塊。這是 Python 內(nèi)置的:
import sqlite3
sqlite3 模塊提供了從 Python 連接、創(chuàng)建 SQLite 數(shù)據(jù)庫并與之交互所需的所有 API 和工具。
要連接到 SQLite 數(shù)據(jù)庫(如果不存在則創(chuàng)建一個(gè)),請(qǐng)使用 sqlite3.connect() 方法:
import sqlite3 db = sqlite3.connect('database.db')
這將打開與數(shù)據(jù)庫文件database.db的連接并返回代表數(shù)據(jù)庫的連接對(duì)象。如果該文件不存在,SQLite 將自動(dòng)創(chuàng)建它。
一旦我們完成與數(shù)據(jù)庫的交互,關(guān)閉連接是一個(gè)很好的做法。這可以通過 close() 方法來完成:
db.close()
創(chuàng)建表
要在 SQLite 中創(chuàng)建表,我們必須執(zhí)行 CREATE TABLE SQL 語句。這是通過首先從數(shù)據(jù)庫連接獲取游標(biāo)對(duì)象來完成的,這使我們能夠執(zhí)行 SQL:
import sqlite3 db = sqlite3.connect('database.db') cursor = db.cursor()
然后我們可以使用游標(biāo)的execute()方法執(zhí)行CREATE TABLE語句:
cursor.execute(""" CREATE TABLE inventory ( id integer PRIMARY KEY, name text NOT NULL, quantity integer, price real ) """)
這將創(chuàng)建一個(gè)包含 ID、名稱、數(shù)量和價(jià)格列的庫存表。請(qǐng)注意,我們定義了每列的數(shù)據(jù)類型。
執(zhí)行 SQL 后,必須將更改提交到數(shù)據(jù)庫。這會(huì)保留更改:
db.commit()
讓我們將其放在一個(gè)函數(shù)中來封裝表創(chuàng)建邏輯:
def create_table(): db = sqlite3.connect('database.db') cursor = db.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS inventory ( id integer PRIMARY KEY, name text NOT NULL, quantity integer, price real ) """) db.commit() db.close()
我們使用 CREATE TABLE IF NOT EXISTS,因此如果表已經(jīng)存在,嘗試再次創(chuàng)建該表不會(huì)導(dǎo)致錯(cuò)誤。
插入數(shù)據(jù)
要將數(shù)據(jù)插入表中,我們可以再次使用execute()方法執(zhí)行SQL語句。SQLite 有一個(gè) INSERT INTO 語句,允許插入新行:
INSERT INTO inventory VALUES (1, 'Bananas', 150, 1.49)
這將插入一個(gè)新行,id 為 1,名稱為 Bananas,數(shù)量為 150,價(jià)格為 1.49。
雖然我們可以使用字符串格式插入數(shù)據(jù),但更好的方法是使用可以安全地將值與查詢分開的查詢參數(shù):
data = (2, 'Oranges', 200, 2.49) cursor.execute("INSERT INTO inventory VALUES (?, ?, ?, ?)", data)
他們?充當(dāng)值的占位符。這有助于防止 SQL 注入攻擊。
我們可以編寫一個(gè)函數(shù)來插入數(shù)據(jù):
def insert_data(values): db = sqlite3.connect('database.db') cursor = db.cursor() cursor.execute("INSERT INTO inventory VALUES (?, ?, ?, ?)", values) db.commit() db.close() # Usage: insert_data((3, 'Apples', 75, 1.25))
這封裝了插入邏輯,同時(shí)允許我們干凈地將數(shù)據(jù)作為元組傳遞。
查看數(shù)據(jù)
我們可以使用 SELECT 語句從數(shù)據(jù)庫中查詢和獲取數(shù)據(jù)。例如,要獲取所有行:
SELECT * FROM inventory
我們可以執(zhí)行此查詢,然后使用cursor.fetchall()以元組形式檢索結(jié)果集:
def get_all_data(): db = sqlite3.connect('database.db') cursor = db.cursor() cursor.execute("SELECT * FROM inventory") rows = cursor.fetchall() db.close() return rows
這將以元組列表的形式返回完整的結(jié)果集,每個(gè)元組代表一行及其值。
我們可以將參數(shù)傳遞給 SELECT 查詢來過濾結(jié)果:
def get_by_name(name): db = sqlite3.connect('database.db') cursor = db.cursor() cursor.execute("SELECT * FROM inventory WHERE name=?", (name,)) row = cursor.fetchone() db.close() return row
這允許我們按名稱檢索特定行。cursor.fetchone() 僅返回第一個(gè)結(jié)果。
更新數(shù)據(jù)
要修改現(xiàn)有數(shù)據(jù),我們可以使用 UPDATE 語句:
UPDATE inventory SET quantity = 200 WHERE name = 'Bananas'
這會(huì)將香蕉的數(shù)量更新為 200。
我們可以編寫一個(gè)函數(shù)來處理更新邏輯:
def update_data(new_quantity, name): db = sqlite3.connect('database.db') cursor = db.cursor() cursor.execute("UPDATE inventory SET quantity =? WHERE name=?", (new_quantity, name)) db.commit() db.close() # Usage: update_data(350, 'Bananas')
與插入類似,這使用查詢參數(shù)安全地傳入值。
刪除數(shù)據(jù)
可以使用 DELETE 語句刪除行:
DELETE FROM inventory WHERE name = 'Oranges'
這將刪除橙色行。
下面是我們?nèi)绾螌?shí)現(xiàn)刪除功能:
def delete_data(name): db = sqlite3.connect('database.db') cursor = db.cursor() cursor.execute("DELETE FROM inventory WHERE name=?", (name,)) db.commit() db.close() # Usage: delete_data('Oranges')
同樣,使用查詢參數(shù)可以避免漏洞并使代碼更易于維護(hù)。
使用Sqlite3構(gòu)建
首先,請(qǐng)?jiān)诖颂幙寺〈鎯?chǔ)庫并按照教程進(jìn)行操作。盡管這是初學(xué)者課程,但您必須對(duì) SQL 有一點(diǎn)了解才能完成。
第一步是導(dǎo)入 sqlite3 模塊:
import sqlite3
這使我們能夠訪問 Python 中的所有 SQLite 數(shù)據(jù)庫功能。
創(chuàng)建表
接下來,定義 create_table() 函數(shù)來創(chuàng)建一個(gè)名為 store 的表,其中包含項(xiàng)目、數(shù)量和價(jià)格列:
def create_table(): new_data = sqlite3.connect('data_base1') change = new_data.cursor() change.execute("CREATE TABLE IF NOT EXISTS store (item TEXT, quantity INTEGER, price REAL)") new_data.commit() new_data.close()
分解一下:
sqlite3.connect() 打開到數(shù)據(jù)庫文件的連接。
new_data.cursor() 獲取一個(gè)游標(biāo)對(duì)象來執(zhí)行SQL。
execute() 運(yùn)行 CREATE TABLE 查詢。
commit() 保存更改。
close() 關(guān)閉連接。
插入數(shù)據(jù)
item() 函數(shù)處理將數(shù)據(jù)插入表中:
def item(item, quantity, price): new_data = sqlite3.connect('data_base1') change = new_data.cursor() change.execute("INSERT INTO store VALUES(?,?,?)", (item, quantity, price)) new_data.commit() new_data.close()
它以項(xiàng)目、數(shù)量和價(jià)格作為參數(shù)。INSERT 查詢使用占位符 ? 將這些值安全地插入到新行中。
查看數(shù)據(jù)
為了查詢數(shù)據(jù),定義了view()函數(shù):
def view(): new_data = sqlite3.connect('data_base1') change = new_data.cursor() change.execute("SELECT * FROM store") rows = change.fetchall() change.close() return rows
它使用 SELECT * 選擇所有行,使用 fetchall() 獲取結(jié)果,然后返回它們。
刪除數(shù)據(jù)
要按項(xiàng)目名稱刪除行,請(qǐng)使用delete()函數(shù):
def delete(item): new_data = sqlite3.connect('data_base1') change = new_data.cursor() change.execute("DELETE FROM store WHERE item =?", (item,)) new_data.commit() new_data.close()
WHERE 子句通過項(xiàng)目名稱標(biāo)識(shí)要?jiǎng)h除的行。
更新數(shù)據(jù)
最后,update() 可以修改給定商品的數(shù)量和價(jià)格:
def update(quantity, price, item): new_data = sqlite3.connect('data_base1') change = new_data.cursor() change.execute("UPDATE store SET quantity =?, price =? WHERE item=?", (quantity, price, item)) new_data.commit() new_data.close()
SET 子句指定要更新的列,WHERE 標(biāo)識(shí)行。
包起來
總之,在 Python 中使用 SQLite 數(shù)據(jù)庫的關(guān)鍵步驟是:
將 sqlite3 模塊導(dǎo)入到您的項(xiàng)目中。
使用 sqlite3.connect() 創(chuàng)建數(shù)據(jù)庫連接。
從連接中獲取游標(biāo)來執(zhí)行SQL語句。
構(gòu)造 SQL 查詢并使用游標(biāo)來執(zhí)行它們。
對(duì)于插入、更新和刪除 - 提交更改以保留它們。
對(duì)于查詢,使用cursor.fetchone() 或cursor.fetchall() 來檢索結(jié)果。
完成后關(guān)閉數(shù)據(jù)庫連接。
使用查詢參數(shù)而不是連接值來避免 SQL 注入。
將數(shù)據(jù)庫邏輯和查詢封裝在函數(shù)中以實(shí)現(xiàn)可重用。
有了這些概念,您就可以利用 SQLite 和 Python 的強(qiáng)大功能構(gòu)建強(qiáng)大的應(yīng)用程序。SQLite3 模塊和 SQL 使您可以完全控制創(chuàng)建、修改和查詢數(shù)據(jù)庫信息。
SQLite 支持更高級(jí)的功能,如事務(wù)、隔離級(jí)別、備份和加密。請(qǐng)務(wù)必參閱官方 SQLite 文檔以利用完整功能。
我希望這份綜合指南能讓您全面了解如何將 SQLite 集成到您的 Python 項(xiàng)目中!如果您還有其他問題,請(qǐng)告訴我。
我希望您喜歡閱讀本指南,并有動(dòng)力開始您的 Python 編程之旅。
如果你喜歡我的工作并且想幫助我繼續(xù)刪除這樣的內(nèi)容,請(qǐng)給我買杯 咖啡。文章來源:http://www.zghlxwxcb.cn/article/396.html
文章來源地址http://www.zghlxwxcb.cn/article/396.html
到此這篇關(guān)于SQLite 與 Python,Python項(xiàng)目中充分利用SQLite的綜合指南的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!