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

python連接sqlite3簡單用法完整例子

 更新時間:2025年08月12日 11:35:44   作者:ypgf_186  
SQLite3是一個內(nèi)置的Python模塊,可以通過Python的標(biāo)準(zhǔn)庫輕松地使用,無需進行額外安裝和配置,這篇文章主要介紹了python連接sqlite3簡單用法的相關(guān)資料,需要的朋友可以參考下

1. 連接到數(shù)據(jù)庫

在 Python 中使用 sqlite3.connect() 方法連接到 SQLite 數(shù)據(jù)庫。如果數(shù)據(jù)庫文件不存在,會自動創(chuàng)建。

import sqlite3
 
# 連接到數(shù)據(jù)庫文件(如果不存在則自動創(chuàng)建)
conn = sqlite3.connect('example.db')
  • 解釋
    • connect('example.db'):創(chuàng)建或打開名為 example.db 的數(shù)據(jù)庫文件。
    • 返回的 conn 是數(shù)據(jù)庫連接對象,后續(xù)操作都需要通過它進行。

2. 創(chuàng)建游標(biāo)對象

通過連接對象創(chuàng)建游標(biāo)(Cursor),用于執(zhí)行 SQL 語句。

cursor = conn.cursor()
  • 解釋
    • 游標(biāo)對象 cursor 用于執(zhí)行 create table、insert into、select 等 SQL 語句。

3. 創(chuàng)建表

使用 create table 語句創(chuàng)建表,推薦使用 if not exists 避免重復(fù)創(chuàng)建。

cursor.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        age INTEGER,
        email TEXT UNIQUE
    )
''')
conn.commit()
  • 解釋
    • create table if not exists users:如果表 users 不存在則創(chuàng)建。
    • id integer primary key autoincrementid 是主鍵,自動遞增。
    • name text not nullname 字段為文本類型且不能為空。
    • email text uniqueemail 字段必須唯一。
    • conn.commit():提交事務(wù)(必須執(zhí)行,否則表不會被創(chuàng)建)。

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

使用 insert into 插入數(shù)據(jù),推薦使用參數(shù)化查詢防止 SQL 注入。

# 單條插入
cursor.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", 
               ('Alice', 25, 'alice@example.com'))
 
# 多條插入
users_data = [
    ('Bob', 30, 'bob@example.com'),
    ('Charlie', 35, 'charlie@example.com')
]
cursor.executemany("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", users_data)
 
conn.commit()
  • 解釋
    • values (?, ?, ?)? 是占位符,Python 會自動替換參數(shù)(防止 SQL 注入)。
    • executemany 可一次插入多條數(shù)據(jù)。
    • conn.commit() 提交事務(wù)(插入操作必須提交)。

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

使用 select 查詢數(shù)據(jù),結(jié)果通過 fetchone()fetchall() 獲取。

# 查詢所有用戶
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
    print(row)
 
# 條件查詢
cursor.execute("SELECT name, age FROM users WHERE age > ?", (30,))
result = cursor.fetchone()
print(result)
  • 解釋
    • select * from users:查詢 users 表的所有字段。
    • fetchall():獲取所有查詢結(jié)果(返回列表)。
    • fetchone():獲取單條結(jié)果(返回元組)。
    • where age > ?:篩選 age 大于指定值的記錄。

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

使用 update 修改已有數(shù)據(jù)。

cursor.execute("UPDATE users SET age = ? WHERE name = ?", (26, 'Alice'))
conn.commit()
  • 解釋
    • set age = ?:將 age 字段更新為新值。
    • where name = ?:僅更新 name 為 'Alice' 的記錄。
    • conn.commit() 提交事務(wù)。

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

使用 delete from 刪除數(shù)據(jù)。

cursor.execute("DELETE FROM users WHERE name = 'Bob'")
conn.commit()
  • 解釋
    • delete from users:刪除 users 表中的記錄。
    • where name = 'Bob':僅刪除 name 為 'Bob' 的記錄。
    • conn.commit() 提交事務(wù)。

8. 創(chuàng)建索引(可選)

索引可以加速查詢,但會降低插入/更新速度。

cursor.execute("CREATE INDEX idx_name ON users (name)")
conn.commit()
  • 解釋
    • create index idx_name on users (name):為 users 表的 name 字段創(chuàng)建索引。

9. 事務(wù)處理

SQLite 支持事務(wù)(begin, commit, rollback),確保操作的原子性。

try:
    # 開始事務(wù)
    conn.execute("BEGIN")
    
    # 執(zhí)行多條操作
    cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('David', 28))
    cursor.execute("UPDATE users SET age = ? WHERE name = ?", (29, 'David'))
    
    # 提交事務(wù)
    conn.commit()
except Exception as e:
    print("事務(wù)失敗,回滾:", e)
    conn.rollback()  # 回滾事務(wù)
  • 解釋
    • begin:顯式開始事務(wù)(默認(rèn)情況下,每條語句都是獨立事務(wù))。
    • conn.commit():提交事務(wù)(所有操作生效)。
    • conn.rollback():回滾事務(wù)(撤銷所有未提交的操作)。

10. 關(guān)閉連接

操作完成后,關(guān)閉游標(biāo)和數(shù)據(jù)庫連接。

cursor.close()
conn.close()
  • 解釋
    • 關(guān)閉游標(biāo)和連接釋放資源,避免內(nèi)存泄漏。

完整示例代碼

import sqlite3
 
# 1. 連接數(shù)據(jù)庫
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
 
# 2. 創(chuàng)建表
cursor.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        age INTEGER,
        email TEXT UNIQUE
    )
''')
conn.commit()
 
# 3. 插入數(shù)據(jù)
cursor.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", 
               ('Alice', 25, 'alice@example.com'))
conn.commit()
 
# 4. 查詢數(shù)據(jù)
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
    print(row)
 
# 5. 更新數(shù)據(jù)
cursor.execute("UPDATE users SET age = ? WHERE name = ?", (26, 'Alice'))
conn.commit()
 
# 6. 刪除數(shù)據(jù)
cursor.execute("DELETE FROM users WHERE name = 'Alice'")
conn.commit()
 
# 7. 關(guān)閉連接
cursor.close()
conn.close()

常見錯誤與避坑指南

  1. 忘記提交事務(wù)

    • 錯誤:插入/更新/刪除后未調(diào)用 conn.commit()。
    • 修正:每次修改數(shù)據(jù)后必須調(diào)用 conn.commit()。
  2. SQL 注入風(fēng)險

    • 錯誤:直接拼接 SQL 語句(如 f"INSERT INTO users VALUES ({name})")。
    • 修正:使用參數(shù)化查詢(如 VALUES (?, ?))。
  3. 字段名與保留字沖突

    • 錯誤:使用 ordergroup 等保留字作為字段名。
    • 修正:避免使用保留字,或用引號包裹字段名(如 "order")。
  4. 未關(guān)閉連接

    • 錯誤:程序結(jié)束時未關(guān)閉 cursor 和 conn。
    • 修正:使用 with 上下文管理器自動關(guān)閉資源:
      with sqlite3.connect('example.db') as conn:
          cursor = conn.cursor()
          # 執(zhí)行操作...

總結(jié)

到此這篇關(guān)于python連接sqlite3簡單用法的文章就介紹到這了,更多相關(guān)python連接sqlite3用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • django session完成狀態(tài)保持的方法

    django session完成狀態(tài)保持的方法

    這篇文章主要介紹了django session完成狀態(tài)保持的方法,使用登錄頁面演示session的狀態(tài)保持功能,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • 使用Turtle畫正螺旋線的方法

    使用Turtle畫正螺旋線的方法

    下面小編就為大家?guī)硪黄褂肨urtle畫正螺旋線的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Python?pip更新的兩種方式詳解

    Python?pip更新的兩種方式詳解

    Pip是用于管理Python軟件包的常用命令,Pip命令還用于更新/升級已經(jīng)安裝的Python軟件包,下面這篇文章主要給大家介紹了關(guān)于Python?pip更新的兩種方式,需要的朋友可以參考下
    2023-02-02
  • 基于python實現(xiàn)判斷字符串是否數(shù)字算法

    基于python實現(xiàn)判斷字符串是否數(shù)字算法

    這篇文章主要介紹了基于python實現(xiàn)判斷字符串是否數(shù)字算法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Ubuntu16.04安裝python3.6.5步驟詳解

    Ubuntu16.04安裝python3.6.5步驟詳解

    這篇文章主要介紹了Ubuntu16.04安裝python3.6.5詳細(xì)步驟,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • Python3 無重復(fù)字符的最長子串的實現(xiàn)

    Python3 無重復(fù)字符的最長子串的實現(xiàn)

    這篇文章主要介紹了Python3 無重復(fù)字符的最長子串的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 關(guān)于Keras模型可視化教程及關(guān)鍵問題的解決

    關(guān)于Keras模型可視化教程及關(guān)鍵問題的解決

    今天小編就為大家分享一篇關(guān)于Keras模型可視化教程及關(guān)鍵問題的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Django之創(chuàng)建引擎索引報錯及解決詳解

    Django之創(chuàng)建引擎索引報錯及解決詳解

    這篇文章主要介紹了Django之創(chuàng)建引擎索引報錯及解決詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Python中的遞歸函數(shù)使用詳解

    Python中的遞歸函數(shù)使用詳解

    這篇文章主要介紹了Python中的遞歸函數(shù)使用詳解,遞歸函數(shù)是指某個函數(shù)調(diào)用自己或者調(diào)用其他函數(shù)后再次調(diào)用自己,由于不能無限嵌套調(diào)用,所以某個遞歸函數(shù)一定存在至少兩個分支,一個是退出嵌套,不再直接或者間接調(diào)用自己;另外一個則是繼續(xù)嵌套,需要的朋友可以參考下
    2023-12-12
  • 用python搭建一個花卉識別系統(tǒng)

    用python搭建一個花卉識別系統(tǒng)

    這學(xué)期修了一門機器視覺的選修課,課設(shè)要是弄一個花卉識別的神經(jīng)網(wǎng)絡(luò),所以我網(wǎng)上找了開源代碼進行了修改,最后成功跑起來,結(jié)果只有一個準(zhǔn)確率(94%)既然都跑了這個神經(jīng)網(wǎng)絡(luò)的代碼,那么干脆就把這個神經(jīng)網(wǎng)絡(luò)真正的使用起來,把這個神經(jīng)網(wǎng)絡(luò)弄成一個可視化界面
    2021-06-06

最新評論