欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Python連接SQLite數(shù)據(jù)庫的操作步驟

 更新時間:2024年12月26日 10:41:09   作者:程序員黃同學  
SQLite是一種輕量級的嵌入式數(shù)據(jù)庫,廣泛應用于各種應用程序中,Python提供了內(nèi)置的sqlite3模塊,使得連接和操作SQLite數(shù)據(jù)庫變得非常簡單,本文給大家介紹了使用Python連接SQLite數(shù)據(jù)庫的操作步驟,需要的朋友可以參考下

SQLite是一種輕量級的嵌入式數(shù)據(jù)庫,廣泛應用于各種應用程序中。

Python提供了內(nèi)置的sqlite3模塊,使得連接和操作SQLite數(shù)據(jù)庫變得非常簡單。

下面我將詳細介紹如何使用sqlite3模塊來連接SQLite數(shù)據(jù)庫,并提供一些實際開發(fā)中的建議和注意事項。

1. 使用 sqlite3 連接SQLite數(shù)據(jù)庫

sqlite3 是Python標準庫中的一個模塊,無需額外安裝即可使用。

連接數(shù)據(jù)庫

下面是一個簡單的示例,展示如何連接到SQLite數(shù)據(jù)庫:

import sqlite3
 
# 創(chuàng)建數(shù)據(jù)庫連接
conn = sqlite3.connect('example.db')
 
# 創(chuàng)建游標對象
cur = conn.cursor()
 
# 創(chuàng)建表
cur.execute('''CREATE TABLE IF NOT EXISTS users (
                    id INTEGER PRIMARY KEY,
                    name TEXT NOT NULL,
                    email TEXT NOT NULL)''')
 
# 插入數(shù)據(jù)
cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))
cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))
 
# 提交事務
conn.commit()
 
# 查詢數(shù)據(jù)
cur.execute("SELECT * FROM users")
rows = cur.fetchall()
 
for row in rows:
    print(row)
 
# 關閉游標和連接
cur.close()
conn.close()

注意事項

  • 錯誤處理:在實際開發(fā)中,應該添加錯誤處理機制,以防止數(shù)據(jù)庫操作失敗或其他異常情況。
import sqlite3
 
try:
    conn = sqlite3.connect('example.db')
    cur = conn.cursor()
    cur.execute('''CREATE TABLE IF NOT EXISTS users (
                        id INTEGER PRIMARY KEY,
                        name TEXT NOT NULL,
                        email TEXT NOT NULL)''')
    cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))
    cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))
    conn.commit()
    cur.execute("SELECT * FROM users")
    rows = cur.fetchall()
    for row in rows:
        print(row)
except sqlite3.Error as e:
    print(f"Error: {e}")
finally:
    if cur:
        cur.close()
    if conn:
        conn.close()
  • 上下文管理器:為了確保資源被正確釋放,可以使用上下文管理器(with語句)來管理數(shù)據(jù)庫連接和游標。
import sqlite3
 
try:
    with sqlite3.connect('example.db') as conn:
        with conn.cursor() as cur:
            cur.execute('''CREATE TABLE IF NOT EXISTS users (
                                id INTEGER PRIMARY KEY,
                                name TEXT NOT NULL,
                                email TEXT NOT NULL)''')
            cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))
            cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))
            conn.commit()
            cur.execute("SELECT * FROM users")
            rows = cur.fetchall()
            for row in rows:
                print(row)
except sqlite3.Error as e:
    print(f"Error: {e}")

2. 使用參數(shù)化查詢

為了避免SQL注入攻擊,應該使用參數(shù)化查詢。

import sqlite3
 
try:
    with sqlite3.connect('example.db') as conn:
        with conn.cursor() as cur:
            cur.execute('''CREATE TABLE IF NOT EXISTS users (
                                id INTEGER PRIMARY KEY,
                                name TEXT NOT NULL,
                                email TEXT NOT NULL)''')
            cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))
            cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))
            conn.commit()
            cur.execute("SELECT * FROM users WHERE name = ?", ('Alice',))
            rows = cur.fetchall()
            for row in rows:
                print(row)
except sqlite3.Error as e:
    print(f"Error: {e}")

3. 使用事務

SQLite支持事務操作,可以通過事務來確保數(shù)據(jù)的一致性和完整性。

import sqlite3
 
try:
    with sqlite3.connect('example.db') as conn:
        with conn.cursor() as cur:
            cur.execute('''CREATE TABLE IF NOT EXISTS users (
                                id INTEGER PRIMARY KEY,
                                name TEXT NOT NULL,
                                email TEXT NOT NULL)''')
            conn.execute("BEGIN TRANSACTION")
            try:
                cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))
                cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))
                conn.commit()
            except sqlite3.Error as e:
                conn.rollback()
                print(f"Error: {e}")
            cur.execute("SELECT * FROM users")
            rows = cur.fetchall()
            for row in rows:
                print(row)
except sqlite3.Error as e:
    print(f"Error: {e}")

實際開發(fā)中的建議

  1. 錯誤處理:始終添加錯誤處理機制,以確保在數(shù)據(jù)庫操作失敗時能夠捕獲并處理異常。
  2. 資源管理:使用上下文管理器來管理數(shù)據(jù)庫連接和游標,確保資源被正確釋放。
  3. 參數(shù)化查詢:使用參數(shù)化查詢來防止SQL注入攻擊,確保數(shù)據(jù)庫操作的安全性。
  4. 事務管理:合理使用事務來確保數(shù)據(jù)的一致性和完整性。
  5. 日志記錄:在生產(chǎn)環(huán)境中,添加日志記錄機制,以便在出現(xiàn)問題時能夠追蹤和調(diào)試。

在Python中連接SQLite數(shù)據(jù)庫,sqlite3 模塊提供了一個簡單且強大的接口。通過合理使用上下文管理器、參數(shù)化查詢和事務管理,可以提高代碼的健壯性和性能,確保數(shù)據(jù)庫操作的安全性和可靠性。在實際開發(fā)中,應該注意錯誤處理、資源管理和日志記錄,以確保系統(tǒng)的穩(wěn)定性和可維護性。

通過這些方法和技巧,你可以有效地連接和管理SQLite數(shù)據(jù)庫,滿足各種復雜的需求。

拓展:Python操作SQLite數(shù)據(jù)庫

創(chuàng)建SQLite數(shù)據(jù)庫

在IDE或文本編輯器中創(chuàng)建一個新的Python文件,把此文件命名為python\_database.py

首先,將SQLite模塊導入到我們的項目中:

import sqlite3

由于Python內(nèi)置了SQLite3,不需要安裝任何東西。接下來,需要創(chuàng)建數(shù)據(jù)庫和與文件的連接。

db = sqlite3.connect('db.sqlite3')
cursor = db.cursor()

上面的代碼分配了兩個變量,第一個變量db調(diào)用了sqlite3.connect,它會連接到文件,這里在括號內(nèi)告訴Python我們想要命名數(shù)據(jù)庫。

cursor變量設置為db.cursor(),Python使用它來讀取和寫入數(shù)據(jù)庫文件表。

然后需要實際創(chuàng)建表,可以通過以下代碼來完成:

cursor.execute('''
            CREATE TABLE IF NOT EXISTS contacts(
                id INTEGER PRIMARY KEY,
                firstName TEXT,
                lastName TEXT,
                age TEXT,
                address TEXT,
                jobTitle TEXT)''')
db.commit()

解釋一下上面的代碼:

調(diào)用cursor.execute來在db.sqlite3數(shù)據(jù)庫文件中寫入一個新表。創(chuàng)建的表名為contacts,CREATE TABLE IF NOT EXISTS行創(chuàng)建表(如果它還不存在于你的Python文件目錄中)。

下面幾行分配表頭名稱給每列,還必須指定每列中將放入什么類型的數(shù)據(jù)。

下面列出了不同的數(shù)據(jù)類型:

  • NULL,該值是個NULL值。

  • INTEGER,該值是個有符號整數(shù),根據(jù)值的大小,以1、2、3、4、6或8個字節(jié)的形式存儲。

  • REAL,該值是個浮點值,存儲為8個字節(jié)的IEEE浮點數(shù)。

  • TEXT,該值是個文本字符串,使用數(shù)據(jù)庫編碼(UTF-8、UTF-16BE或UTF-16LE)存儲。

  • BLOB,該值是數(shù)據(jù)的二進制大對象,以原始形式存儲。

有一個名為id的列,為其分配了INTEGER PRIMARY KEY值。這對數(shù)據(jù)庫來說是必需的,以便為每個條目分配唯一的ID,SQLite會自動增加每個新條目,每次添加新條目時SQLite都會自動將每個條目遞增1。(在創(chuàng)建其他表之間的關系時,也需要使用此功能)。

創(chuàng)建的下一組標題包括firstNamelastName、ageaddressjobTitle,由此構建一個簡單的聯(lián)系人數(shù)據(jù)庫,調(diào)用db.commit()將表提交到數(shù)據(jù)庫文件中。

現(xiàn)在向新表中輸入一些假數(shù)據(jù),可以編寫一些 SQL 代碼,如下所示:

cursor.execute('''INSERT INTO contacts(firstName, lastName, age, address, jobTitle) VALUES (?, ?, ?, ?, ?)''', ('Grant', 'Peach', '35', '1 Smith Street', 'Software Dev'))
db.commit()

如果運行上面的代碼,Python將執(zhí)行SQL并把條目插入到表中正確的標題中。

為了使它變得稍微簡單一些,下面畫了一個圖表,說明了它是如何工作的:

每個?都是一個占位符,用于向標題輸入條目,因此也可以使用變量來輸入數(shù)據(jù),例如來自用戶輸入等。

SQLite數(shù)據(jù)庫閱讀器

如果想知道數(shù)據(jù)是否輸入到數(shù)據(jù)庫中,可以通過多種方式檢查這一點,但是需要一些其他軟件來完成這個操作,這取決于操作系統(tǒng)甚至IDE可以使用什么來完成這個操作。

MacOS SQLite數(shù)據(jù)庫閱讀器

  • Base(£19.99或通過SetApp獲得)

  • 適用于 SQLite 的 DB 瀏覽器(免費)

Windows SQLite數(shù)據(jù)庫閱讀器

  • 適用于 SQLite 的 DB 瀏覽器(免費)

  • SQLite閱讀器(升級需要費用)

Linux SQLite數(shù)據(jù)庫閱讀器

  • 適用于 SQLite 的 DB 瀏覽器(免費)

安裝其中一個閱讀器,并加載數(shù)據(jù)庫文件,應該會看到類似于下面屏幕截圖的GUI:

并且能夠看到創(chuàng)建的表以及所有的標題,如果單擊瀏覽數(shù)據(jù)選項卡,就會看到表格中包含通過代碼分配給每個標題的內(nèi)容,如下所示:

DB Browser是編輯數(shù)據(jù)以及通過CSV文件加載大量數(shù)據(jù)的真正有用工具,也可以在具有專業(yè)版的Pycharm IDE中執(zhí)行此操作。

查找數(shù)據(jù)

現(xiàn)在已經(jīng)知道如何輸入數(shù)據(jù)以及查看它是否實際位于我們的數(shù)據(jù)庫中,來返回到代碼并創(chuàng)建一個函數(shù),可以搜索數(shù)據(jù)庫并顯示輸出。

刪除代碼中的數(shù)據(jù)輸入部分,因為我們不再需要它(或者直接注釋),構建搜索函數(shù),此函數(shù)將搜索任何給定的第一個名字并返回該行數(shù)據(jù)。

def search_db(first_name):
        cursor.execute("SELECT * FROM contacts WHERE firstName  LIKE '%' || ? || '%'", (first_name,))
        results = cursor.fetchall()
        print('Results Found...\n')
        print(results)
 
search_db('Grant')

運行上面的代碼會輸出以下內(nèi)容:

解釋一下代碼:

cursor.execute("SELECT * FROM contacts WHERE firstName  LIKE '%' || ? || '%'", (first_name,))

上面的代碼從 contacts 表中選擇所有內(nèi)容,其中 firstName 列中包含搜索到的首字母。然后創(chuàng)建了一個叫做results的變量,通過 cursor.fetchall() 將結果分配給該變量,然后在終端中打印出結果。

以上就是使用Python連接SQLite數(shù)據(jù)庫的操作步驟的詳細內(nèi)容,更多關于Python連接SQLite的資料請關注腳本之家其它相關文章!

相關文章

  • Python實現(xiàn)矩陣轉置的幾種方法詳解

    Python實現(xiàn)矩陣轉置的幾種方法詳解

    這篇文章主要介紹了Python實現(xiàn)矩陣轉置的幾種方法詳解,zip() 函數(shù)用于將可迭代的對象作為參數(shù),將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的對象,這樣做的好處是節(jié)約了不少的內(nèi)存,需要的朋友可以參考下
    2023-08-08
  • Python實現(xiàn)PDF頁面的刪除與添加功能

    Python實現(xiàn)PDF頁面的刪除與添加功能

    在處理PDF文檔的過程中,我們時常會需要對PDF文檔中的頁面進行編輯操作的情況,如插入和刪除頁面,通過添加和刪除PDF頁面,我們可以增加內(nèi)容或對不需要的內(nèi)容進行刪除,本文將介紹如何使用Python代碼實現(xiàn)在PDF文檔中添加和刪除頁面
    2024-04-04
  • 用python寫一個windows消息提醒小程序

    用python寫一個windows消息提醒小程序

    上班時,由于自己經(jīng)常coding到忘記時間,經(jīng)常會一坐坐很久,搞的勞資腰都不好了,所以沒事閑的寫了個久坐提醒的小程序,文中有詳細的代碼示例,講解的非常詳細,感興趣的朋友可以參考下
    2023-12-12
  • 新手入門Python編程的8個實用建議

    新手入門Python編程的8個實用建議

    這篇文章主要介紹了Python編程的8個實用建議,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Python Django搭建網(wǎng)站流程圖解

    Python Django搭建網(wǎng)站流程圖解

    這篇文章主要介紹了Python Django搭建網(wǎng)站流程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Python調(diào)用百度AI實現(xiàn)圖片上表格識別功能

    Python調(diào)用百度AI實現(xiàn)圖片上表格識別功能

    這篇文章主要給大家介紹了關于Python調(diào)用百度AI實現(xiàn)圖片上表格識別功能的相關資料,在Python環(huán)境下,利用百度AI開放平臺文字識別技術,對表格類圖片進行識別,需要的朋友可以參考下
    2021-09-09
  • Python numpy有哪些常用數(shù)據(jù)類型

    Python numpy有哪些常用數(shù)據(jù)類型

    Numpy提供了兩種基本的對象:ndarray(N-dimensional Array Object)和 ufunc(Universal Function Object)。ndarray是存儲單一數(shù)據(jù)類型的多維數(shù)組,而ufunc則是能夠對數(shù)組進行處理的函數(shù)
    2023-02-02
  • python字符串操作詳析

    python字符串操作詳析

    這篇文章主要介紹了python字符串操作,字符串是不可變類型可以重新賦值,但不可以索引改變其中一個值,只能拼接字符串建立新變量,下面來了解具體內(nèi)容吧,需要的小伙伴可以參考一下
    2022-02-02
  • PyQt轉換路徑中的斜杠(斜杠(/)與反斜杠(\)轉換)

    PyQt轉換路徑中的斜杠(斜杠(/)與反斜杠(\)轉換)

    本文主要介紹了PyQt轉換路徑中的斜杠(斜杠(/)與反斜杠(\)轉換),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • Python利用wxPython制作一個有趣的驗證碼生成器

    Python利用wxPython制作一個有趣的驗證碼生成器

    這篇文章主要為大家詳細介紹了Python如何利用wxPython制作一個簡單有趣的驗證碼生成器,文中的示例代碼講解詳細,需要的小伙伴可以了解一下
    2023-04-04

最新評論