Python中的SQLite3模块

sqlite3 Python模块指南

SQLite3是一个用C语言编写的Python模块,允许与轻量级的本地SQL数据库进行交互。它是Python标准库的一部分,无需安装。本文假设您了解基本的Python和SQL。


设置

开始之前:

import sqlite3 as sql

然后建立连接和游标:

connection = sql.connect("my_database.db")
cursor = connection.cursor()

connection 将你的 Python 程序与数据库连接起来。
cursor 发送 SQL 命令并获取结果。


SQL 查询类型

你将使用两种主要类型的 SQL 命令:

DDL(数据定义语言): CREATEDROPALTER
DML(数据操作语言): INSERTSELECTUPDATEDELETE


DDL 示例:创建和删除表

connection = sql.connect("my_database.db")
cursor = connection.cursor()

cursor.execute("""
如果不存在则创建用户表 (
    id 整数 主键 自增,
    name 文本 不为空,
    age 整数
);
""")

# 示例 删除
cursor.execute("如果存在则删除旧用户表;")

connection.commit()
connection.close()

所有的 DDL 命令 必须 后跟 connection.commit(),否则您的更改将不会被保存。


DML 示例:插入和选择数据

插入示例

connection = sql.connect("my_database.db")
cursor = connection.cursor()
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Alice", 25))
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Bob", 30))
connection.commit()
connection.close()

选择示例

connection = sql.connect("my_database.db")
cursor = connection.cursor()
cursor.execute("SELECT * FROM users")
data = cursor.fetchall()
connection.close()
print(data)

所有的 SELECT 命令 必须 后跟适当的获取命令。

使用以下方法来检索数据:

方法 返回值
fetchone() 作为元组返回的一行
fetchmany(n) 作为元组列表返回的下一 n
fetchall() 作为元组列表返回的所有行

示例:

cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
    print(row)

输出:

[(1, 'Alice', 25), (2, 'Bob', 30)]

下一步

现在您已经了解了 sqlite3 模块的基础知识以及如何与数据库进行交互,以下是一些我们可能还需要讨论的重要主题:

使用 with 语句

使用 with 可以确保您的数据库连接在发生错误时自动关闭:

import sqlite3 as sql

with sql.connect("my_database.db") as connection:
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM users")
    data = cursor.fetchall()
    print(data)

基本错误处理

将您的数据库操作包装在try-except块中,以捕获DatabaseError

try:
    connection = sql.connect("my_database.db")
    cursor = connection.cursor()
cursor.execute("从用户表中选择所有记录")
data = cursor.fetchall()
except sql.DatabaseError as e:
    print(f"发生数据库错误: {e}")
finally:
    connection.close()
异常 描述 sqlite3.DatabaseError 通用数据库错误 sqlite3.IntegrityError 约束违反(例如,唯一性、外键) sqlite3.OperationalError 操作问题(例如,缺少表、语法错误) sqlite3.ProgrammingError API误用(例如,参数错误) sqlite3.InterfaceError 与数据库接口相关的错误

防止SQL注入

始终使用参数化查询(带有?占位符)来安全地插入用户输入,避免SQL注入风险:

name = "Alice"
age = 25

cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", (name, age))

更多