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

在Python中使用SQLite數(shù)據(jù)庫進行增刪改查操作的代碼示例

 更新時間:2025年11月25日 08:43:28   作者:test管家  
SQLite 是 Python 內(nèi)置支持的輕量級嵌入式數(shù)據(jù)庫,無需安裝額外服務端,僅通過文件(或內(nèi)存)存儲數(shù)據(jù),非常適合小型項目、測試場景或本地數(shù)據(jù)管理,以下是完整的增刪改查(CRUD)操作教程,包含核心語法、示例代碼和最佳實踐,需要的朋友可以參考下

一、核心前置知識

  1. Python 內(nèi)置 sqlite3 模塊,無需 pip install,直接導入即可使用。
  2. 操作流程:建立連接 → 創(chuàng)建游標 → 執(zhí)行SQL → 處理結(jié)果 → 提交事務(增刪改)→ 關閉資源。
  3. 占位符:SQLite 使用 ? 作為參數(shù)占位符(避免 SQL 注入,切勿字符串拼接)。

二、完整 CRUD 示例

步驟1:導入模塊并建立連接

import sqlite3

# 1. 建立連接(關鍵)
# - 連接本地文件:test.db(不存在則自動創(chuàng)建)
# - 內(nèi)存數(shù)據(jù)庫:sqlite3.connect(":memory:")(程序退出后數(shù)據(jù)丟失)
conn = sqlite3.connect("test.db")

# 2. 創(chuàng)建游標(執(zhí)行SQL的工具)
cursor = conn.cursor()

步驟2:創(chuàng)建表(基礎準備)

先定義數(shù)據(jù)表結(jié)構(gòu)(以 users 表為例,包含 id、姓名、年齡、郵箱):

# 創(chuàng)建users表(IF NOT EXISTS 避免重復創(chuàng)建)
create_table_sql = """
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,  -- 自增主鍵
    name TEXT NOT NULL,                    -- 姓名(非空)
    age INTEGER,                           -- 年齡
    email TEXT UNIQUE                      -- 郵箱(唯一,避免重復)
);
"""
cursor.execute(create_table_sql)
conn.commit()  # 建表屬于修改操作,需提交事務

步驟3:新增數(shù)據(jù)(CREATE)

支持單條插入批量插入,核心是用 ? 占位符傳遞參數(shù):

# 方式1:單條插入
insert_single_sql = "INSERT INTO users (name, age, email) VALUES (?, ?, ?);"
# 參數(shù)以元組形式傳遞,匹配占位符數(shù)量
cursor.execute(insert_single_sql, ("Alice", 25, "alice@example.com"))

# 方式2:批量插入(效率更高,減少IO)
insert_batch_sql = "INSERT INTO users (name, age, email) VALUES (?, ?, ?);"
data_list = [
    ("Bob", 30, "bob@example.com"),
    ("Charlie", 28, "charlie@example.com"),
    ("David", 22, "david@example.com")
]
cursor.executemany(insert_batch_sql, data_list)

# 增刪改操作必須提交事務,否則數(shù)據(jù)不生效
conn.commit()
print("插入數(shù)據(jù)成功,最后插入的ID:", cursor.lastrowid)  # 獲取最后插入的主鍵ID

步驟4:查詢數(shù)據(jù)(READ)

查詢無需提交事務,核心是通過 fetchone()/fetchall()/fetchmany(n) 獲取結(jié)果:

# 方式1:查詢單條數(shù)據(jù)(fetchone())
select_single_sql = "SELECT * FROM users WHERE name = ?;"
cursor.execute(select_single_sql, ("Alice",))
single_result = cursor.fetchone()  # 返回元組:(1, 'Alice', 25, 'alice@example.com')
print("單條查詢結(jié)果:", single_result)

# 方式2:查詢多條數(shù)據(jù)(fetchall())
select_all_sql = "SELECT id, name, age FROM users WHERE age > ?;"
cursor.execute(select_all_sql, (25,))
all_results = cursor.fetchall()  # 返回列表嵌套元組:[(2, 'Bob', 30), (3, 'Charlie', 28)]
print("\n多條查詢結(jié)果:")
for row in all_results:
    print(f"ID: {row[0]}, 姓名: {row[1]}, 年齡: {row[2]}")

# 方式3:指定條數(shù)查詢(fetchmany(n))
cursor.execute("SELECT * FROM users;")
many_results = cursor.fetchmany(2)  # 僅獲取前2條
print("\n指定條數(shù)查詢結(jié)果:", many_results)

# 進階:返回字典格式結(jié)果(更易讀)
# 創(chuàng)建游標時指定 row_factory
conn.row_factory = sqlite3.Row
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE id = ?;", (1,))
dict_result = cursor.fetchone()
print("\n字典格式結(jié)果:", dict_result["name"], dict_result["email"])  # 可通過鍵取值

步驟5:更新數(shù)據(jù)(UPDATE)

根據(jù)條件修改已有數(shù)據(jù),注意加 WHERE 子句(否則會更新全表):

update_sql = "UPDATE users SET age = ? WHERE name = ?;"
cursor.execute(update_sql, (26, "Alice"))  # 將Alice的年齡改為26
conn.commit()

# 查看受影響的行數(shù)
print("更新影響的行數(shù):", cursor.rowcount)  # 輸出:1

步驟6:刪除數(shù)據(jù)(DELETE)

同樣需加 WHERE 子句(否則刪除全表數(shù)據(jù)):

delete_sql = "DELETE FROM users WHERE id = ?;"
cursor.execute(delete_sql, (4,))  # 刪除ID為4的記錄
conn.commit()

print("刪除影響的行數(shù):", cursor.rowcount)  # 輸出:1

步驟7:關閉資源(避免泄漏)

# 先關游標,再關連接
cursor.close()
conn.close()

三、最佳實踐

1. 使用上下文管理器(with 語句)

自動關閉游標/連接,無需手動 close,更簡潔安全:

import sqlite3

# 上下文管理器簡化操作
with sqlite3.connect("test.db") as conn:
    cursor = conn.cursor()
    # 執(zhí)行查詢
    cursor.execute("SELECT * FROM users;")
    print("上下文管理器查詢結(jié)果:", cursor.fetchall())
    # 增刪改無需手動commit,with塊結(jié)束會自動提交(出錯則回滾)
    cursor.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?);", ("Eve", 29, "eve@example.com"))

2. 防 SQL 注入(關鍵)

嚴禁字符串拼接 SQL,必須使用 ? 占位符:

# 錯誤示例(易被注入,如name傳入 "Alice'; DROP TABLE users; --")
name = "Alice"
sql = f"SELECT * FROM users WHERE name = '{name}';"  # 危險!

# 正確示例(占位符)
sql = "SELECT * FROM users WHERE name = ?;"
cursor.execute(sql, (name,))  # 安全

3. 處理異常(生產(chǎn)環(huán)境必備)

捕獲 sqlite3.Error 異常,避免程序崩潰:

import sqlite3

try:
    conn = sqlite3.connect("test.db")
    cursor = conn.cursor()
    # 執(zhí)行可能出錯的操作(如插入重復郵箱)
    cursor.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?);", ("Frank", 35, "alice@example.com"))
    conn.commit()
except sqlite3.IntegrityError as e:
    # 捕獲唯一鍵沖突異常
    print("插入失?。何ㄒ绘I沖突", e)
    conn.rollback()  # 出錯回滾事務
except sqlite3.Error as e:
    print("數(shù)據(jù)庫錯誤:", e)
    conn.rollback()
finally:
    if cursor:
        cursor.close()
    if conn:
        conn.close()

四、常見問題解答

  1. 建表后數(shù)據(jù)不生效?
    增刪改/建表操作需執(zhí)行 conn.commit(),查詢無需。
  2. 自增主鍵如何獲取?
    插入后通過 cursor.lastrowid 獲取最后插入的 ID。
  3. 如何返回字典格式結(jié)果?
    設置 conn.row_factory = sqlite3.Row,游標結(jié)果可通過鍵取值。
  4. 內(nèi)存數(shù)據(jù)庫的用途?
    sqlite3.connect(":memory:") 適合臨時測試,數(shù)據(jù)僅存于內(nèi)存,程序退出后丟失。

總結(jié)

SQLite 操作的核心是:

  • 連接:sqlite3.connect()(文件/內(nèi)存);
  • 執(zhí)行:cursor.execute()(單條)/executemany()(批量);
  • 參數(shù):用 ? 占位符,避免 SQL 注入;
  • 事務:增刪改需 commit(),異常需 rollback()
  • 資源:用 with 語句或手動關閉游標/連接。

掌握以上內(nèi)容,即可滿足 Python 中 SQLite 絕大部分基礎使用場景。

以上就是在Python中使用SQLite數(shù)據(jù)庫進行增刪改查操作的代碼示例的詳細內(nèi)容,更多關于Python使用SQLite增刪改查的資料請關注腳本之家其它相關文章!

相關文章

  • keras建模的3種方式詳解

    keras建模的3種方式詳解

    這篇文章主要介紹了keras建模的3種方式詳解,keras是Google公司于2016年發(fā)布的以tensorflow為后端的用于深度學習網(wǎng)絡訓練的高階API,因接口設計非常人性化,深受程序員的喜愛,需要的朋友可以參考下
    2023-08-08
  • Python批量解壓&壓縮文件夾的示例代碼

    Python批量解壓&壓縮文件夾的示例代碼

    這篇文章主要介紹了利用Python實現(xiàn)批量解壓&壓縮文件夾的示例代碼,文中的實現(xiàn)步驟講解詳細,感興趣的小伙伴快跟隨小編一起動手試一試
    2022-04-04
  • K近鄰法(KNN)相關知識總結(jié)以及如何用python實現(xiàn)

    K近鄰法(KNN)相關知識總結(jié)以及如何用python實現(xiàn)

    這篇文章主要介紹了K近鄰法(KNN)相關知識總結(jié)以及如何用python實現(xiàn),幫助大家更好的利用python實現(xiàn)機器學習,感興趣的朋友可以了解下
    2021-01-01
  • 如何利用Python實現(xiàn)給Excel表格截圖

    如何利用Python實現(xiàn)給Excel表格截圖

    這篇文章主要為大家詳細介紹了如何利用Python實現(xiàn)給Excel表格截圖功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-02-02
  • python機器學習實現(xiàn)oneR算法(以鳶尾data為例)

    python機器學習實現(xiàn)oneR算法(以鳶尾data為例)

    本文主要介紹了python機器學習實現(xiàn)oneR算法(以鳶尾data為例),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Python獲取對象信息的常用方法和示例

    Python獲取對象信息的常用方法和示例

    在Python中,我們經(jīng)常需要獲取和操作對象的信息,這些信息可能包括對象的類型、屬性、方法以及內(nèi)存地址等,Python提供了一些內(nèi)置函數(shù)和方法,可以幫助我們獲取這些信息,以下是一些常用的方法和示例,需要的朋友可以參考下
    2025-06-06
  • Pytorch實現(xiàn)將label變成one hot編碼的兩種方式

    Pytorch實現(xiàn)將label變成one hot編碼的兩種方式

    這篇文章主要介紹了Pytorch實現(xiàn)將label變成one hot編碼的兩種方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python實現(xiàn)爬蟲抓取與讀寫、追加到excel文件操作示例

    Python實現(xiàn)爬蟲抓取與讀寫、追加到excel文件操作示例

    這篇文章主要介紹了Python實現(xiàn)爬蟲抓取與讀寫、追加到excel文件操作,結(jié)合具體實例形式分析了Python針對糗事百科的抓取與Excel文件讀寫相關操作技巧,需要的朋友可以參考下
    2018-06-06
  • 用Python實現(xiàn)BP神經(jīng)網(wǎng)絡(附代碼)

    用Python實現(xiàn)BP神經(jīng)網(wǎng)絡(附代碼)

    這篇文章主要介紹了用Python實現(xiàn)BP神經(jīng)網(wǎng)絡(附代碼),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • scrapy-redis的安裝部署步驟講解

    scrapy-redis的安裝部署步驟講解

    今天小編就為大家分享一篇關于scrapy-redis的安裝部署步驟講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02

最新評論

新乐市| 平昌县| 行唐县| 湖口县| 广饶县| 晋宁县| 孝义市| 台安县| 托里县| 报价| 泾源县| 格尔木市| 鄂托克旗| 新营市| 金平| 黔西县| 南部县| 舞钢市| 寿阳县| 固原市| 临沂市| 紫云| 资源县| 北宁市| 平武县| 大丰市| 东乡族自治县| 新巴尔虎左旗| 玛沁县| 兰西县| 汉寿县| 临洮县| 贡觉县| 论坛| 曲麻莱县| 龙泉市| 绵竹市| 道真| 永和县| 平度市| 陕西省|