位置: 文档库 > Python > 分享python3连接sqlite实例代码

分享python3连接sqlite实例代码

刘墉 上传于 2024-05-25 11:18

《分享Python3连接SQLite实例代码》

SQLite作为一种轻量级的嵌入式数据库,因其零配置、无需服务器、跨平台等特性,在Python开发中被广泛用于小型项目、原型开发及移动应用等场景。Python3通过内置的sqlite3模块提供了对SQLite数据库的完整支持,开发者无需安装额外依赖即可实现数据库的创建、连接、查询及事务管理。本文将通过完整的实例代码,详细讲解Python3连接SQLite数据库的完整流程,涵盖从基础连接到高级操作的各个方面。

一、SQLite数据库基础

SQLite是一个开源的、基于磁盘的关系型数据库引擎,其数据存储在单个文件中(如test.db),支持标准的SQL语法。与MySQL、PostgreSQL等客户端-服务器架构的数据库不同,SQLite的数据库引擎直接嵌入在应用程序中,通过文件I/O操作读写数据。这种设计使得SQLite具有以下优势:

  • 零配置:无需安装服务、配置权限或创建用户。

  • 跨平台:同一数据库文件可在Windows、Linux、macOS等系统间共享。

  • 轻量级:核心引擎仅约500KB,适合资源受限的环境(如移动设备)。

  • 事务支持:满足ACID特性,保证数据一致性。

二、Python3连接SQLite的完整流程

Python3的sqlite3模块提供了完整的SQLite操作接口,其核心步骤包括:导入模块、连接数据库、创建游标、执行SQL语句、提交/回滚事务、关闭连接。以下通过实例代码逐步演示。

1. 导入sqlite3模块

import sqlite3

sqlite3是Python标准库的一部分,无需额外安装。若使用更高级的功能(如类型适配),可进一步导入sqlite3.adapters模块。

2. 连接数据库

通过sqlite3.connect()方法建立与数据库的连接。若数据库文件不存在,则会自动创建;若存在,则直接打开。

# 连接数据库(若test.db不存在则创建)
conn = sqlite3.connect('test.db')

参数说明:

  • database:数据库文件路径(相对或绝对路径)。

  • timeout:等待锁释放的超时时间(秒),默认5.0。

  • detect_types:启用类型检测(如sqlite3.PARSE_DECLTYPES)。

  • isolation_level:事务隔离级别(如None表示自动提交模式)。

3. 创建游标对象

游标(Cursor)是执行SQL语句和获取结果的核心对象,通过连接对象的cursor()方法创建。

cursor = conn.cursor()

游标的主要方法:

  • execute():执行单条SQL语句。

  • executemany():批量执行参数化SQL。

  • executescript():执行多条SQL脚本(自动分号分隔)。

  • fetchone():获取单行结果。

  • fetchmany(size):获取指定行数的结果。

  • fetchall():获取所有结果。

4. 创建表并插入数据

以下代码演示如何创建用户表并插入示例数据:

# 创建用户表
cursor.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        age INTEGER,
        email TEXT UNIQUE
    )
''')

# 插入单条数据
cursor.execute(
    "INSERT INTO users (name, age, email) VALUES (?, ?, ?)",
    ('Alice', 25, 'alice@example.com')
)

# 插入多条数据(使用executemany)
users_data = [
    ('Bob', 30, 'bob@example.com'),
    ('Charlie', 22, 'charlie@example.com'),
    ('David', 28, 'david@example.com')
]
cursor.executemany(
    "INSERT INTO users (name, age, email) VALUES (?, ?, ?)",
    users_data
)

参数化查询(?占位符)可有效防止SQL注入攻击,避免直接拼接SQL字符串。

5. 查询数据

通过SELECT语句查询数据,并使用fetch方法获取结果:

# 查询所有用户
cursor.execute("SELECT * FROM users")
all_users = cursor.fetchall()
print("所有用户:")
for user in all_users:
    print(user)

# 查询特定条件的用户(年龄大于25)
cursor.execute(
    "SELECT name, email FROM users WHERE age > ?",
    (25,)
)
filtered_users = cursor.fetchall()
print("\n年龄大于25的用户:")
for user in filtered_users:
    print(f"姓名: {user[0]}, 邮箱: {user[1]}")

6. 更新与删除数据

# 更新用户年龄
cursor.execute(
    "UPDATE users SET age = ? WHERE name = ?",
    (26, 'Alice')
)

# 删除用户
cursor.execute(
    "DELETE FROM users WHERE name = ?",
    ('David',)
)

7. 事务管理

SQLite默认开启事务,需通过commit()提交或rollback()回滚:

try:
    # 执行多个操作
    cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Eve', 35))
    cursor.execute("UPDATE users SET age = age + 1 WHERE name = 'Bob'")
    
    # 提交事务
    conn.commit()
    print("事务提交成功")
except sqlite3.Error as e:
    # 发生错误时回滚
    conn.rollback()
    print(f"事务回滚,错误:{e}")

8. 关闭连接

操作完成后必须关闭连接以释放资源:

cursor.close()  # 先关闭游标
conn.close()    # 再关闭连接

或使用上下文管理器(推荐):

with sqlite3.connect('test.db') as conn:
    cursor = conn.cursor()
    # 执行操作
    # 无需显式调用close(),上下文退出时自动关闭

三、高级功能与最佳实践

1. 使用上下文管理器

通过with语句自动管理连接和游标的生命周期,避免资源泄漏:

with sqlite3.connect('test.db') as conn:
    with conn:  # 嵌套上下文,自动提交或回滚
        cursor = conn.cursor()
        cursor.execute("INSERT INTO users (name) VALUES (?)", ('Frank',))

2. 行工厂与类型适配

自定义行工厂可将查询结果转换为字典或其他对象:

def dict_factory(cursor, row):
    d = {}
    for idx, col in enumerate(cursor.description):
        d[col[0]] = row[idx]
    return d

conn.row_factory = dict_factory
cursor = conn.cursor()
cursor.execute("SELECT * FROM users LIMIT 1")
user = cursor.fetchone()
print(user)  # 输出:{'id': 1, 'name': 'Alice', ...}

3. 错误处理

捕获sqlite3.Error及其子类(如IntegrityError、OperationalError):

try:
    conn = sqlite3.connect('test.db')
    # 操作数据库
except sqlite3.Error as e:
    print(f"数据库错误:{e}")
finally:
    if conn:
        conn.close()

4. 性能优化

  • 批量操作:使用executemany()替代循环execute()。

  • 事务分组:将多个操作放在一个事务中减少I/O。

  • 索引优化:为常用查询条件创建索引。

四、完整实例代码

以下是一个完整的Python3连接SQLite的示例,包含创建表、插入、查询、更新、删除及事务管理:

import sqlite3
from contextlib import closing

def main():
    # 使用上下文管理器连接数据库
    with closing(sqlite3.connect('example.db')) as conn:
        # 设置行工厂为字典类型
        conn.row_factory = sqlite3.Row
        
        # 创建游标
        cursor = conn.cursor()
        
        try:
            # 创建表
            cursor.execute('''
                CREATE TABLE IF NOT EXISTS products (
                    id INTEGER PRIMARY KEY,
                    name TEXT NOT NULL,
                    price REAL,
                    stock INTEGER DEFAULT 0
                )
            ''')
            
            # 插入数据
            products = [
                ('Laptop', 999.99, 10),
                ('Mouse', 19.99, 50),
                ('Keyboard', 49.99, 30)
            ]
            cursor.executemany(
                "INSERT INTO products (name, price, stock) VALUES (?, ?, ?)",
                products
            )
            
            # 查询数据
            print("所有产品:")
            cursor.execute("SELECT * FROM products")
            for row in cursor.fetchall():
                print(dict(row))  # 转换为字典输出
            
            # 更新数据
            cursor.execute(
                "UPDATE products SET price = ? WHERE name = ?",
                (24.99, 'Keyboard')
            )
            
            # 条件查询
            print("\n库存少于20的产品:")
            cursor.execute(
                "SELECT name, stock FROM products WHERE stock 

五、总结与扩展

本文通过实例代码详细展示了Python3连接SQLite数据库的全流程,包括基础操作、事务管理、高级功能及最佳实践。SQLite因其轻量级和易用性,非常适合小型项目或原型开发。对于更复杂的场景,可结合SQLAlchemy等ORM工具进一步提升开发效率。

扩展方向:

  • 使用SQLite的WAL模式(Write-Ahead Logging)提升并发性能。

  • 通过APSW库访问SQLite的C接口,实现更底层控制。

  • 将SQLite与Pandas结合,实现数据分析与持久化的无缝集成。

关键词:Python3、SQLite数据库连接、参数化查询、事务管理、上下文管理器、类型适配、实例代码

简介:本文详细介绍了Python3通过内置sqlite3模块连接SQLite数据库的完整流程,涵盖从基础连接到高级操作的实例代码,包括创建表、插入数据、查询、更新、删除及事务管理,同时提供了上下文管理器、行工厂、错误处理等最佳实践,适合Python开发者快速掌握SQLite数据库操作。

《分享python3连接sqlite实例代码.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档