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

python連接sqlite3簡(jiǎn)單用法完整例子

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

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

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

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

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

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

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

3. 創(chuàng)建表

使用 create table 語(yǔ)句創(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 是主鍵,自動(dòng)遞增。
    • name text not nullname 字段為文本類(lèi)型且不能為空。
    • email text uniqueemail 字段必須唯一。
    • conn.commit():提交事務(wù)(必須執(zhí)行,否則表不會(huì)被創(chuàng)建)。

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

使用 insert into 插入數(shù)據(jù),推薦使用參數(shù)化查詢(xún)防止 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 會(huì)自動(dòng)替換參數(shù)(防止 SQL 注入)。
    • executemany 可一次插入多條數(shù)據(jù)。
    • conn.commit() 提交事務(wù)(插入操作必須提交)。

5. 查詢(xún)數(shù)據(jù)

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

# 查詢(xún)所有用戶(hù)
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
    print(row)
 
# 條件查詢(xún)
cursor.execute("SELECT name, age FROM users WHERE age > ?", (30,))
result = cursor.fetchone()
print(result)
  • 解釋
    • select * from users:查詢(xún) users 表的所有字段。
    • fetchall():獲取所有查詢(xún)結(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)建索引(可選)

索引可以加速查詢(xún),但會(huì)降低插入/更新速度。

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:
    # 開(kāi)始事務(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:顯式開(kāi)始事務(wù)(默認(rèn)情況下,每條語(yǔ)句都是獨(dú)立事務(wù))。
    • conn.commit():提交事務(wù)(所有操作生效)。
    • conn.rollback():回滾事務(wù)(撤銷(xiāo)所有未提交的操作)。

10. 關(guān)閉連接

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

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

完整示例代碼

import sqlite3
 
# 1. 連接數(shù)據(jù)庫(kù)
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. 查詢(xún)數(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()

常見(jiàn)錯(cuò)誤與避坑指南

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • 使用Django實(shí)現(xiàn)把兩個(gè)模型類(lèi)的數(shù)據(jù)聚合在一起

    使用Django實(shí)現(xiàn)把兩個(gè)模型類(lèi)的數(shù)據(jù)聚合在一起

    這篇文章主要介紹了使用Django實(shí)現(xiàn)把兩個(gè)模型類(lèi)的數(shù)據(jù)聚合在一起,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • 基于python實(shí)現(xiàn)判斷字符串是否數(shù)字算法

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

    這篇文章主要介紹了基于python實(shí)現(xiàn)判斷字符串是否數(shù)字算法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 在Django的session中使用User對(duì)象的方法

    在Django的session中使用User對(duì)象的方法

    這篇文章主要介紹了在Django的session中使用User對(duì)象的方法,Django是眾Python web開(kāi)發(fā)框架中人氣最高的一個(gè),需要的朋友可以參考下
    2015-07-07
  • Python3 pywin32模塊安裝的詳細(xì)步驟

    Python3 pywin32模塊安裝的詳細(xì)步驟

    這篇文章主要介紹了Python3 pywin32模塊安裝的詳細(xì)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • python的click命令行cli工具使用

    python的click命令行cli工具使用

    本文主要介紹了使用Python的click庫(kù)將函數(shù)轉(zhuǎn)換為命令行工具的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-04-04
  • Python調(diào)用C語(yǔ)言動(dòng)態(tài)庫(kù)的方法小結(jié)

    Python調(diào)用C語(yǔ)言動(dòng)態(tài)庫(kù)的方法小結(jié)

    這篇文章主要為大家詳細(xì)介紹了Python調(diào)用C語(yǔ)言動(dòng)態(tài)庫(kù)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下
    2024-12-12
  • 新手常犯的10個(gè)Python錯(cuò)誤及解決方法總結(jié)

    新手常犯的10個(gè)Python錯(cuò)誤及解決方法總結(jié)

    在學(xué)習(xí) Python 的過(guò)程中,新手開(kāi)發(fā)者經(jīng)常會(huì)遇到一些常見(jiàn)的錯(cuò)誤,今天,就讓我們一起看看這些常見(jiàn)錯(cuò)誤及其解決方法,幫助你更快地掌握 Python 編程
    2025-10-10
  • keras-siamese用自己的數(shù)據(jù)集實(shí)現(xiàn)詳解

    keras-siamese用自己的數(shù)據(jù)集實(shí)現(xiàn)詳解

    這篇文章主要介紹了keras-siamese用自己的數(shù)據(jù)集實(shí)現(xiàn)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • python原類(lèi)、類(lèi)的創(chuàng)建過(guò)程與方法詳解

    python原類(lèi)、類(lèi)的創(chuàng)建過(guò)程與方法詳解

    在本篇文章里小編給各位分享了關(guān)于python原類(lèi)、類(lèi)的創(chuàng)建過(guò)程與方法的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們跟著學(xué)習(xí)參考下。
    2019-07-07
  • vscode配置與python虛擬環(huán)境切換的幾種方式總結(jié)

    vscode配置與python虛擬環(huán)境切換的幾種方式總結(jié)

    Python之所以強(qiáng)大,除了語(yǔ)言本身的特性外,更重要的是擁有無(wú)所不及的第三方庫(kù),下面這篇文章主要給大家介紹了關(guān)于vscode配置與python虛擬環(huán)境切換的幾種方式,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12

最新評(píng)論

搜索| 鹤峰县| 恩平市| 房山区| 内丘县| 清丰县| 会泽县| 泽普县| 仁化县| 南木林县| 绥芬河市| 新丰县| 页游| 武山县| 仁寿县| 康乐县| 湘潭县| 布尔津县| 渑池县| 汉川市| 东丰县| 松江区| 高清| 卓尼县| 华蓥市| 徐闻县| 新河县| 那坡县| 蕲春县| 庄河市| 门源| 莎车县| 茌平县| 晋城| 栾川县| 仪陇县| 兰坪| 贺兰县| 黄石市| 皋兰县| 巩义市|