python的sqlite介紹
本文將深入探討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=1
、name='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命令放在begin
和commit
之間,以確保它們被視為單個事務處理。
以上是python的sqlite介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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

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