最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中如何使用sqlite3操作SQLite數(shù)據(jù)庫詳解

 更新時(shí)間:2025年03月14日 10:01:03   作者:莫比烏斯之夢  
這篇文章主要介紹了Python中SQLite數(shù)據(jù)庫的使用,包括連接數(shù)據(jù)庫、創(chuàng)建表、數(shù)據(jù)增刪改查、事務(wù)管理和參數(shù)化查詢等,并提供了操作示例,需要的朋友可以參考下

前言

在 Python 開發(fā)中,SQLite 是一種輕量級(jí)的關(guān)系型數(shù)據(jù)庫,它無需單獨(dú)安裝數(shù)據(jù)庫服務(wù)器,所有數(shù)據(jù)存儲(chǔ)在一個(gè)單獨(dú)的文件中,適用于小型應(yīng)用、移動(dòng)開發(fā)、數(shù)據(jù)分析等場景。Python 提供了內(nèi)置的 sqlite3 模塊,方便我們操作 SQLite 數(shù)據(jù)庫。本文將詳細(xì)介紹 sqlite3 模塊的使用,包括數(shù)據(jù)庫連接、表操作、數(shù)據(jù)增刪改查(CRUD),以及常見的事務(wù)管理參數(shù)化查詢,幫助你快速掌握 Python 操作 SQLite 數(shù)據(jù)庫的方法。

1. 為什么選擇 SQLite?

零配置:Python 內(nèi)置支持,無需安裝額外數(shù)據(jù)庫服務(wù)。

文件存儲(chǔ):數(shù)據(jù)庫僅是一個(gè) .db 文件,便于管理。

輕量高效:適用于小型應(yīng)用、測試環(huán)境、移動(dòng)端存儲(chǔ)。

SQL 支持:支持 SQL 語法,易于與其他數(shù)據(jù)庫遷移。

?? SQLite 適用場景

  • 桌面應(yīng)用(如瀏覽器、記事本應(yīng)用存儲(chǔ)用戶數(shù)據(jù))。
  • 移動(dòng)應(yīng)用(Android、iOS 本地?cái)?shù)據(jù)庫)。
  • 數(shù)據(jù)分析(存儲(chǔ)小型數(shù)據(jù)集,替代 CSV 文件)。

2. 連接 SQLite 數(shù)據(jù)庫

2.1 連接或創(chuàng)建數(shù)據(jù)庫

使用 sqlite3.connect() 連接數(shù)據(jù)庫:

import sqlite3

# 連接數(shù)據(jù)庫(如果不存在則創(chuàng)建)
conn = sqlite3.connect("example.db")

print("數(shù)據(jù)庫連接成功")

?? 特點(diǎn)

  • 如果 example.db 存在,則連接它,否則自動(dòng)創(chuàng)建該文件。

2.2 獲取游標(biāo)(Cursor)

數(shù)據(jù)庫操作需要使用 游標(biāo)對象(cursor)

cursor = conn.cursor()

?? 作用

  • cursor.execute(sql) 用于執(zhí)行 SQL 語句。
  • cursor.fetchall() 獲取查詢結(jié)果。

3. 創(chuàng)建表(CREATE TABLE)

使用 CREATE TABLE 語句創(chuàng)建數(shù)據(jù)庫表:

cursor.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        age INTEGER,
        city TEXT
    )
''')
conn.commit()  # 提交更改
print("表創(chuàng)建成功")

?? 解析

  • id INTEGER PRIMARY KEY AUTOINCREMENT:主鍵自增。
  • TEXT NOT NULLname 必須有值。
  • IF NOT EXISTS:避免重復(fù)創(chuàng)建表。

4. 插入數(shù)據(jù)(INSERT INTO)

4.1 插入單條數(shù)據(jù)

cursor.execute("INSERT INTO users (name, age, city) VALUES (?, ?, ?)",
               ("Alice", 25, "New York"))
conn.commit()
print("插入數(shù)據(jù)成功")

?? 注意

  • ? 占位符 避免 SQL 注入。
  • conn.commit() 提交事務(wù),否則數(shù)據(jù)不會(huì)保存。

4.2 插入多條數(shù)據(jù)(executemany())

users = [
    ("Bob", 30, "San Francisco"),
    ("Charlie", 28, "Los Angeles"),
    ("David", 35, "Seattle")
]

cursor.executemany("INSERT INTO users (name, age, city) VALUES (?, ?, ?)", users)
conn.commit()
print("批量插入成功")

?? 適用于

  • 批量寫入數(shù)據(jù),避免多次 execute() 提高效率。

5. 查詢數(shù)據(jù)(SELECT)

5.1 查詢所有數(shù)據(jù)

cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()

for row in rows:
    print(row)

?? fetchall() 獲取所有數(shù)據(jù),返回列表

(1, 'Alice', 25, 'New York')
(2, 'Bob', 30, 'San Francisco')
(3, 'Charlie', 28, 'Los Angeles')

5.2 查詢單條數(shù)據(jù)(fetchone())

cursor.execute("SELECT * FROM users WHERE name = ?", ("Alice",))
user = cursor.fetchone()
print(user)

?? fetchone() 獲取單條數(shù)據(jù),適用于查詢唯一記錄

6. 更新數(shù)據(jù)(UPDATE)

cursor.execute("UPDATE users SET age = ? WHERE name = ?", (26, "Alice"))
conn.commit()
print("數(shù)據(jù)更新成功")

?? 確保

  • SET age = ? 只更新 age 列,避免誤修改其他數(shù)據(jù)。

7. 刪除數(shù)據(jù)(DELETE)

cursor.execute("DELETE FROM users WHERE name = ?", ("David",))
conn.commit()
print("數(shù)據(jù)刪除成功")

?? 務(wù)必小心

  • 沒有 WHERE 條件會(huì)刪除所有數(shù)據(jù)!
  • 先 SELECT 確認(rèn)數(shù)據(jù)是否存在。

8. 事務(wù)管理(commit() 和 rollback())

8.1 commit() 提交事務(wù)

conn.commit()  # 確保數(shù)據(jù)寫入數(shù)據(jù)庫

?? 每次 INSERT、UPDATE、DELETE 后,都要 commit() 確保數(shù)據(jù)持久化。

8.2 rollback() 回滾事務(wù)

try:
    cursor.execute("UPDATE users SET age = ? WHERE name = ?", (100, "Charlie"))
    raise Exception("模擬異常")  # 模擬錯(cuò)誤
    conn.commit()
except Exception as e:
    conn.rollback()  # 發(fā)生錯(cuò)誤時(shí)回滾
    print("事務(wù)回滾:", e)

?? 作用

  • 如果操作失敗,回滾到上一次 commit(),防止錯(cuò)誤影響數(shù)據(jù)庫。

9. 關(guān)閉數(shù)據(jù)庫連接

cursor.close()
conn.close()
print("數(shù)據(jù)庫連接已關(guān)閉")

?? 最佳實(shí)踐

  • 完成所有數(shù)據(jù)庫操作后,應(yīng)關(guān)閉連接,釋放資源。

10. 結(jié)合 with 語句自動(dòng)管理連接

Python 提供 with 語法,自動(dòng)關(guān)閉數(shù)據(jù)庫連接

with sqlite3.connect("example.db") as conn:
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM users")
    print(cursor.fetchall())

?? 優(yōu)勢

  • 自動(dòng) commit()
  • 異常發(fā)生時(shí)自動(dòng) rollback()
  • 退出時(shí)自動(dòng)關(guān)閉 conn

11. 使用 Row 以字典方式訪問數(shù)據(jù)

默認(rèn) fetchall() 返回元組

cursor.execute("SELECT * FROM users")
print(cursor.fetchone())  # (1, 'Alice', 25, 'New York')

可以改用 sqlite3.Row 使數(shù)據(jù)可用字典訪問

conn.row_factory = sqlite3.Row  # 設(shè)置行工廠
cursor = conn.cursor()

cursor.execute("SELECT * FROM users")
row = cursor.fetchone()
print(row["name"], row["age"])  # Alice 25

?? 適用于

  • 提高可讀性,避免 row[0] 這樣的索引訪問方式。

12. 結(jié)論

操作代碼示例
連接數(shù)據(jù)庫conn = sqlite3.connect("example.db")
創(chuàng)建表CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)
插入數(shù)據(jù)INSERT INTO users (name, age) VALUES (?, ?)
查詢數(shù)據(jù)SELECT * FROM users
更新數(shù)據(jù)UPDATE users SET age = ? WHERE name = ?
刪除數(shù)據(jù)DELETE FROM users WHERE name = ?
事務(wù)管理commit() / rollback()
關(guān)閉連接conn.close()

sqlite3 是 Python 內(nèi)置的數(shù)據(jù)庫模塊,適用于小型應(yīng)用、測試、數(shù)據(jù)存儲(chǔ)等場景。掌握這些操作,你就可以輕松管理 SQLite 數(shù)據(jù)庫,提升開發(fā)效率!

總結(jié)

到此這篇關(guān)于Python中如何使用sqlite3操作SQLite數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)Python sqlite3操作SQLite內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python程序打包工具py2exe和PyInstaller詳解

    Python程序打包工具py2exe和PyInstaller詳解

    這篇文章主要介紹了Python程序打包工具py2exe和PyInstaller詳解,如果可以提前將程序打包成 Windows平臺(tái)的 .exe 文件或者是Linux下的 .sh 腳本,那么使用起來就會(huì)方便很多,需要的朋友可以參考下
    2019-06-06
  • Python牛刀小試密碼爆破

    Python牛刀小試密碼爆破

    用Python與vbs分別實(shí)現(xiàn)的爆破bbs論壇賬號(hào)的代碼,學(xué)習(xí)python或vbs的朋友可以參考下。
    2011-02-02
  • python清除字符串中間空格的實(shí)例講解

    python清除字符串中間空格的實(shí)例講解

    今天小編就為大家分享一篇python清除字符串中間空格的實(shí)例講解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python練習(xí)之制作企業(yè)獎(jiǎng)金計(jì)算器

    Python練習(xí)之制作企業(yè)獎(jiǎng)金計(jì)算器

    在本篇博客中,我們將使用Python代碼解決一個(gè)企業(yè)獎(jiǎng)金計(jì)算的問題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-06-06
  • Django的數(shù)據(jù)模型訪問多對多鍵值的方法

    Django的數(shù)據(jù)模型訪問多對多鍵值的方法

    這篇文章主要介紹了Django的數(shù)據(jù)模型訪問多對多鍵值的方法,Django是Python豐富多彩的web框架中最具人氣的一個(gè),需要的朋友可以參考下
    2015-07-07
  • NumPy雙曲函數(shù)與集合操作詳解

    NumPy雙曲函數(shù)與集合操作詳解

    NumPy?提供了?sinh()、cosh()?和?tanh()?等?ufunc,它們接受弧度值并生成相應(yīng)的雙曲正弦、雙曲余弦和雙曲正切值,我們可以使用?NumPy?的?unique()?方法從任何數(shù)組中找到唯一元素,本文給大家詳細(xì)介紹了NumPy雙曲函數(shù)與集合操作,需要的朋友可以參考下
    2024-06-06
  • 使用 Supervisor 監(jiān)控 Python3 進(jìn)程方式

    使用 Supervisor 監(jiān)控 Python3 進(jìn)程方式

    今天小編就為大家分享一篇使用 Supervisor 監(jiān)控 Python3 進(jìn)程方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 訊飛webapi語音識(shí)別接口調(diào)用示例代碼(python)

    訊飛webapi語音識(shí)別接口調(diào)用示例代碼(python)

    這篇文章主要介紹了如何使用Python3調(diào)用訊飛WebAPI語音識(shí)別接口,重點(diǎn)解決了在處理語音識(shí)別結(jié)果時(shí)判斷是否為最后一幀的問題,通過運(yùn)行代碼并總結(jié)經(jīng)驗(yàn),解決了常見的模塊和屬性錯(cuò)誤,需要的朋友可以參考下
    2025-03-03
  • tensorflow中tf.reduce_mean函數(shù)的使用

    tensorflow中tf.reduce_mean函數(shù)的使用

    這篇文章主要介紹了tensorflow中tf.reduce_mean函數(shù)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 詳解python3 GUI刷屏器(附源碼)

    詳解python3 GUI刷屏器(附源碼)

    這篇文章主要介紹了詳解python3 GUI刷屏器(附源碼),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02

最新評論

信丰县| 涿鹿县| 鞍山市| 汝城县| 宣化县| 弋阳县| 乌拉特中旗| 乌苏市| 福州市| 改则县| 瑞昌市| 广昌县| 义乌市| 黄龙县| 东至县| 繁峙县| 麟游县| 曲阜市| 吉林市| 田阳县| 镇赉县| 宜州市| 福泉市| 留坝县| 长寿区| 洱源县| 锡林浩特市| 内丘县| 互助| 惠安县| 襄樊市| 京山县| 社旗县| 英山县| 灵山县| 海林市| 望都县| 于都县| 康保县| 德清县| 中江县|