当前位置: 首页 > article >正文

如何使用 Python 连接 SQLite 数据库?

SQLite是一种轻量级的嵌入式数据库,广泛应用于各种应用程序中。

Python提供了内置的sqlite3模块,使得连接和操作SQLite数据库变得非常简单。

下面我将详细介绍如何使用sqlite3模块来连接SQLite数据库,并提供一些实际开发中的建议和注意事项。

1. 使用 sqlite3 连接SQLite数据库

sqlite3 是Python标准库中的一个模块,无需额外安装即可使用。

连接数据库

下面是一个简单的示例,展示如何连接到SQLite数据库:

import sqlite3

# 创建数据库连接
conn = sqlite3.connect('example.db')

# 创建游标对象
cur = conn.cursor()

# 创建表
cur.execute('''CREATE TABLE IF NOT EXISTS users (
                    id INTEGER PRIMARY KEY,
                    name TEXT NOT NULL,
                    email TEXT NOT NULL)''')

# 插入数据
cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))
cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))

# 提交事务
conn.commit()

# 查询数据
cur.execute("SELECT * FROM users")
rows = cur.fetchall()

for row in rows:
    print(row)

# 关闭游标和连接
cur.close()
conn.close()
注意事项
  1. 错误处理:在实际开发中,应该添加错误处理机制,以防止数据库操作失败或其他异常情况。
import sqlite3

try:
    conn = sqlite3.connect('example.db')
    cur = conn.cursor()
    cur.execute('''CREATE TABLE IF NOT EXISTS users (
                        id INTEGER PRIMARY KEY,
                        name TEXT NOT NULL,
                        email TEXT NOT NULL)''')
    cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))
    cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))
    conn.commit()
    cur.execute("SELECT * FROM users")
    rows = cur.fetchall()
    for row in rows:
        print(row)
except sqlite3.Error as e:
    print(f"Error: {e}")
finally:
    if cur:
        cur.close()
    if conn:
        conn.close()
  1. 上下文管理器:为了确保资源被正确释放,可以使用上下文管理器(with语句)来管理数据库连接和游标。
import sqlite3

try:
    with sqlite3.connect('example.db') as conn:
        with conn.cursor() as cur:
            cur.execute('''CREATE TABLE IF NOT EXISTS users (
                                id INTEGER PRIMARY KEY,
                                name TEXT NOT NULL,
                                email TEXT NOT NULL)''')
            cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))
            cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))
            conn.commit()
            cur.execute("SELECT * FROM users")
            rows = cur.fetchall()
            for row in rows:
                print(row)
except sqlite3.Error as e:
    print(f"Error: {e}")
2. 使用参数化查询

为了避免SQL注入攻击,应该使用参数化查询。

import sqlite3

try:
    with sqlite3.connect('example.db') as conn:
        with conn.cursor() as cur:
            cur.execute('''CREATE TABLE IF NOT EXISTS users (
                                id INTEGER PRIMARY KEY,
                                name TEXT NOT NULL,
                                email TEXT NOT NULL)''')
            cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))
            cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))
            conn.commit()
            cur.execute("SELECT * FROM users WHERE name = ?", ('Alice',))
            rows = cur.fetchall()
            for row in rows:
                print(row)
except sqlite3.Error as e:
    print(f"Error: {e}")
3. 使用事务

SQLite支持事务操作,可以通过事务来确保数据的一致性和完整性。

import sqlite3

try:
    with sqlite3.connect('example.db') as conn:
        with conn.cursor() as cur:
            cur.execute('''CREATE TABLE IF NOT EXISTS users (
                                id INTEGER PRIMARY KEY,
                                name TEXT NOT NULL,
                                email TEXT NOT NULL)''')
            conn.execute("BEGIN TRANSACTION")
            try:
                cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))
                cur.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Bob', 'bob@example.com'))
                conn.commit()
            except sqlite3.Error as e:
                conn.rollback()
                print(f"Error: {e}")
            cur.execute("SELECT * FROM users")
            rows = cur.fetchall()
            for row in rows:
                print(row)
except sqlite3.Error as e:
    print(f"Error: {e}")
实际开发中的建议
  1. 错误处理:始终添加错误处理机制,以确保在数据库操作失败时能够捕获并处理异常。
  2. 资源管理:使用上下文管理器来管理数据库连接和游标,确保资源被正确释放。
  3. 参数化查询:使用参数化查询来防止SQL注入攻击,确保数据库操作的安全性。
  4. 事务管理:合理使用事务来确保数据的一致性和完整性。
  5. 日志记录:在生产环境中,添加日志记录机制,以便在出现问题时能够追踪和调试。

在Python中连接SQLite数据库,sqlite3 模块提供了一个简单且强大的接口。通过合理使用上下文管理器、参数化查询和事务管理,可以提高代码的健壮性和性能,确保数据库操作的安全性和可靠性。在实际开发中,应该注意错误处理、资源管理和日志记录,以确保系统的稳定性和可维护性。

通过这些方法和技巧,你可以有效地连接和管理SQLite数据库,满足各种复杂的需求。希望这些内容对你有所帮助,如果你有任何问题或需要进一步的讨论,请随时提问。


http://www.kler.cn/a/447323.html

相关文章:

  • 深入了解Java在人工智能领域的最新应用
  • 使用 Buildroot 构建带有 Avahi 支持的 Linux 系统
  • React简单了解
  • StarRocks:存算一体模式部署
  • 【IoTDB 线上小课 10】为什么选择 IoTDB 管理时序数据?
  • 杂七杂八的网络安全知识
  • MicroPython+ESP32:五.PC远程控制LED灯
  • 36.2 内置的k8s采集任务分析
  • AI呼入机器人详解
  • ubuntu 执行sh脚本出现报错:source:not found
  • 界面控件DevExpress v24.2.3全新发布——正式支持.NET 9
  • 算法—回文链表
  • Docker的网络
  • 大语言模型的常用微调方法
  • 单片机上电后程序不运行怎么排查问题?
  • Soul Preserver
  • 圣诞快乐(h5 css js(圣诞树))
  • 大数据之Hbase环境安装
  • 【Linux】usb内核设备信息
  • Elixir Supervisor
  • 青少年编程与数学 02-004 Go语言Web编程 12课题、本地数据存储
  • 智能电动汽车游智能化与电动化
  • IIC I2C子协议 SMBus协议 通信协议原理 时序 SMBus深度剖析
  • 智慧养老系统源码医院陪诊代办买药就医陪护上门护理小程序
  • 【蓝桥杯每日一题】扫描游戏——线段树
  • 以客户成功为核心,镜舟科技驱动数据库开源商业化创新