目錄
核心要點
什麼是SQLite?
Python的SQLite接口
開始使用sqlite3
創建、讀取和修改記錄
佔位符
事務
結論
關於使用SQLite和Python的常見問題
首頁 後端開發 Python教學 python的sqlite介紹

python的sqlite介紹

Feb 18, 2025 am 11:21 AM

An Introduction to SQLite with Python

本文將深入探討SQLite數據庫及其與Python的結合使用。我們將學習如何通過Python的sqlite3庫操作SQLite數據庫,並最終探索sqlite3提供的一些高級特性來簡化我們的工作。

注意:在開始之前,最好熟悉SQL。如果您不熟悉,可以參考Simply SQL學習。

核心要點

  • SQLite是一個輕量級的、基於文件的關聯式數據庫管理系統,因其簡單易用和配置簡便而常用於Python應用程序。它支持並發訪問,允許多個進程或線程訪問同一個數據庫。然而,它缺乏多用戶功能,並且不像MySQL或PostgreSQL等其他數據庫技術那樣可以作為進程進行管理。
  • Python中的sqlite3模塊為SQLite提供了SQL接口,並且隨Python預安裝。它允許用戶創建數據庫、連接到數據庫、創建表、插入數據和執行SQL命令。該模塊還支持佔位符,允許在SQL命令中進行參數替換,從而更輕鬆地將變量插入查詢中。
  • SQLite中的事務是一系列數據庫操作,被視為一個單元,以確保數據完整性。 Python的sqlite3模塊在執行INSERT、UPDATE、DELETE或REPLACE語句之前啟動事務。用戶必須調用commit()方法來保存事務期間所做的更改,並且可以通過在連接到數據庫時將isolation_level設置為None來顯式地處理事務。

什麼是SQLite?

SQLite的座右銘是:“小巧、快速、可靠。三選其二。”

SQLite是一個用C語言編寫的嵌入式數據庫庫。您可能熟悉其他數據庫技術,例如MySQL或PostgreSQL。這些技術使用客戶端-服務器方法:數據庫作為服務器安裝,然後使用客戶端連接到它。 SQLite則不同:它被稱為嵌入式數據庫,因為它作為庫包含在程序中。所有數據都存儲在一個文件中——通常擴展名為.db——並且您可以使用函數來運行SQL語句或對數據庫執行任何其他操作。

基於文件的存儲解決方案還提供並發訪問,這意味著多個進程或線程可以訪問同一個數據庫。那麼,SQLite的用途是什麼?它適用於任何類型的應用程序嗎?

SQLite在以下幾種情況下表現出色:

  • 由於包含在大多數移動操作系統(如Android和iOS)中,如果您需要一個獨立的、無服務器的數據存儲解決方案,SQLite可能是一個完美的選擇。
  • 與使用大型CSV文件相比,您可以利用SQL的強大功能並將所有數據放入單個SQLite數據庫中。
  • SQLite可用於存儲應用程序的配置數據。事實上,SQLite比基於文件的系統(如配置文件)快35%。

另一方面,有哪些不選擇SQLite的原因呢?

  • 與MySQL或PostgreSQL不同,SQLite缺乏多用戶功能。
  • SQLite仍然是一個基於文件的數據庫,而不是服務。您不能將其作為進程管理,也不能啟動、停止它或管理資源使用情況。

Python的SQLite接口

正如我在引言中提到的,SQLite是一個C庫。但是,有很多語言都編寫了接口,包括Python。 sqlite3模塊提供了一個SQL接口,並且至少需要SQLite 3.7.15。

令人驚奇的是,sqlite3隨Python一起提供,因此您無需安裝任何內容。

開始使用sqlite3

是時候編寫代碼了!在第一部分中,我們將創建一個基本的數據庫。首先要做的是創建一個數據庫並連接到它:

import sqlite3
dbName = 'database.db'

try:
  conn = sqlite3.connect(dbName)
  cursor = conn.cursor()
  print("Database created!")

except Exception as e:
  print("Something bad happened: ", e)
  if conn:
    conn.close()
登入後複製
登入後複製
登入後複製

在第1行,我們導入sqlite3庫。然後,在一個try/except代碼塊中,我們調用sqlite3.connect()來初始化與數據庫的連接。如果一切順利,conn將是Connection對象的實例。如果try失敗,我們將打印收到的異常,並關閉與數據庫的連接。正如官方文檔中所述,每個打開的SQLite數據庫都由一個Connection對象表示。每次我們必須執行SQL命令時,Connection對像都有一個名為cursor()的方法。在數據庫技術中,游標是一種控制結構,它允許遍歷數據庫中的記錄。

現在,如果我們執行這段代碼,我們應該得到以下輸出:

<code>> Database created!</code>
登入後複製
登入後複製

如果我們查看Python腳本所在的文件夾,應該會看到一個名為database.db的新文件。此文件是由sqlite3自動創建的。

創建、讀取和修改記錄

此時,我們準備創建一個新表,添加第一個條目並執行SQL命令,如SELECT、UPDATE或DROP。

要創建表,我們只需要執行一個簡單的SQL語句。在這個例子中,我們將創建一個students表,其中包含以下數據:

id name surname
1 John Smith
2 Lucy Jacobs
3 Stephan Taylor

print("Database created!")行之後,添加以下內容:

import sqlite3
dbName = 'database.db'

try:
  conn = sqlite3.connect(dbName)
  cursor = conn.cursor()
  print("Database created!")

except Exception as e:
  print("Something bad happened: ", e)
  if conn:
    conn.close()
登入後複製
登入後複製
登入後複製

我們創建了一個表並調用cursor.execute()方法,當我們想要執行單個SQL語句時使用此方法。

然後,我們為要添加的每一行執行一個INSERT操作。完成所有更改後,我們調用conn.commit()將掛起的事務提交到數據庫。如果不調用commit()方法,對數據庫的任何掛起更改都將丟失。最後,我們通過調用conn.close()方法關閉與數據庫的連接。

好的,現在讓我們查詢我們的數據庫!我們需要一個變量來保存查詢的結果,所以讓我們將cursor.execute()的結果保存到名為records的變量中:

<code>> Database created!</code>
登入後複製
登入後複製

執行此操作後,我們將看到所有記錄輸出到標準輸出:

# 创建操作
create_query = '''CREATE TABLE IF NOT EXISTS student(
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  surname TEXT NOT NULL);
  '''
cursor.execute(create_query)
print("Table created!")

# 插入和读取操作
cursor.execute("INSERT INTO student VALUES (1, 'John', 'Smith')")
print("Insert #1 done!")
cursor.execute("INSERT INTO student VALUES (2, 'Lucy', 'Jacobs')")
print("Insert #2 done!")
cursor.execute("INSERT INTO student VALUES (3, 'Stephan', 'Taylor')")
print("Insert #3 done!")
conn.commit()
conn.close()
登入後複製

此時,您可能已經註意到,在cursor.execute()方法中,我們放置了必須執行的SQL命令。如果我們想要執行另一個SQL命令(如UPDATE或DROP),Python語法不會發生任何變化。

佔位符

cursor.execute()方法需要一個字符串作為參數。在上一節中,我們看到瞭如何將數據插入到我們的數據庫中,但是所有內容都是硬編碼的。如果我們需要將變量中的內容存儲到數據庫中怎麼辦?為此,sqlite3有一些稱為佔位符的巧妙功能。佔位符允許我們使用參數替換,這將使將變量插入查詢變得更容易。

讓我們看看這個例子:

records = cursor.execute("SELECT * FROM student")
for row in records:
  print(row)
登入後複製

我們創建了一個名為insert_command()的方法。此方法接受四個參數:第一個參數是一個Connection實例,另外三個將在我們的SQL命令中使用。

command變量中的每個?都代表一個佔位符。這意味著,如果您使用student_id=1name='Jason'surname='Green'調用insert_command函數,則INSERT語句將變為INSERT INTO student VALUES(1, 'Jason', 'Green')

當我們調用execute()函數時,我們傳遞我們的命令和所有將被替換為佔位符的變量。從現在開始,每次我們需要在student表中插入一行時,我們都將使用所需的參數調用insert_command()方法。

事務

即使您不是事務定義的新手,我也會快速回顧一下它的重要性。事務是在數據庫上執行的一系列操作,在邏輯上被視為一個單元。

事務最重要的優點是確保數據完整性。在我們上面介紹的示例中,它可能沒有用,但是當我們處理存儲在多個表中的更多數據時,事務確實會產生影響。

Python的sqlite3模塊在execute()executemany()執行INSERT、UPDATE、DELETE或REPLACE語句之前啟動事務。這意味著兩件事:

  • 我們必須注意調用commit()方法。如果我們在不執行commit()的情況下調用Connection.close(),我們在事務期間所做的所有更改都將丟失。
  • 我們不能在同一個進程中使用BEGIN打開事務。

解決方案?顯式處理事務。

如何?通過使用函數調用sqlite3.connect(dbName, isolation_level=None)而不是sqlite3.connect(dbName)。通過將isolation_level設置為None,我們強制sqlite3永遠不會隱式打開事務。

以下代碼是對先前代碼的重寫,但顯式使用了事務:

import sqlite3
dbName = 'database.db'

try:
  conn = sqlite3.connect(dbName)
  cursor = conn.cursor()
  print("Database created!")

except Exception as e:
  print("Something bad happened: ", e)
  if conn:
    conn.close()
登入後複製
登入後複製
登入後複製

結論

我希望您現在已經很好地理解了什麼是SQLite,如何將其用於您的Python項目,以及其一些高級功能的工作方式。顯式管理事務起初可能有點棘手,但它肯定可以幫助您充分利用sqlite3

相關閱讀:

  • 開始使用SQLite3:基本命令
  • 使用unittest和pytest進行Python單元測試入門
  • 使用SQLite管理iOS應用程序中的數據
  • HTTP Python請求初學者指南
  • SQL與NoSQL:區別

關於使用SQLite和Python的常見問題

什麼是SQLite,為什麼我要將它與Python一起使用? SQLite是一個輕量級的、基於文件的關聯式數據庫管理系統。由於其簡單性和最少的配置,它被廣泛用於嵌入式數據庫應用程序。將SQLite與Python一起使用提供了一種方便的方法,可以將數據庫集成到Python應用程序中,而無需單獨的數據庫服務器。

如何在Python中連接到SQLite數據庫?您可以使用sqlite3模塊(隨Python預安裝)連接到SQLite數據庫。使用connect()方法建立連接並獲取連接對象,然後創建一個游標來執行SQL命令。

如何使用Python在SQLite數據庫中創建表?您可以使用游標對像上的execute()方法運行SQL命令。要創建表,請使用CREATE TABLE語句。

如何使用Python將數據插入SQLite表中?使用INSERT INTO語句將數據插入表中。佔位符%s?可用於參數化查詢,以避免SQL注入。

如何在Python中使用SQLite事務? SQLite中的事務使用連接對像上的commit()rollback()方法進行管理。將多個SQL命令放在begincommit之間,以確保它們被視為單個事務處理。

以上是python的sqlite介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1658
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1231
24
Python vs.C:申請和用例 Python vs.C:申請和用例 Apr 12, 2025 am 12:01 AM

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時的Python計劃:一種現實的方法 2小時的Python計劃:一種現實的方法 Apr 11, 2025 am 12:04 AM

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python:遊戲,Guis等 Python:遊戲,Guis等 Apr 13, 2025 am 12:14 AM

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

您可以在2小時內學到多少python? 您可以在2小時內學到多少python? Apr 09, 2025 pm 04:33 PM

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

Python與C:學習曲線和易用性 Python與C:學習曲線和易用性 Apr 19, 2025 am 12:20 AM

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

Python和時間:充分利用您的學習時間 Python和時間:充分利用您的學習時間 Apr 14, 2025 am 12:02 AM

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python:探索其主要應用程序 Python:探索其主要應用程序 Apr 10, 2025 am 09:41 AM

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

Python:自動化,腳本和任務管理 Python:自動化,腳本和任務管理 Apr 16, 2025 am 12:14 AM

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

See all articles