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(数据定义语言): CREATE
、DROP
、ALTER
DML(数据操作语言): INSERT
、SELECT
、UPDATE
、DELETE
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))