首页 › 论坛 › 置顶 › Python中的SQLite3模块
正在查看 1 个帖子:1-1 (共 1 个帖子)
-
作者帖子
-
2025-07-17 16:17 #25130Q QPY课程团队管理员
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.ProgrammingErrorAPI误用(例如,参数错误)sqlite3.InterfaceError与数据库接口相关的错误
防止SQL注入
始终使用参数化查询(带有
?占位符)来安全地插入用户输入,避免SQL注入风险:name = "Alice" age = 25cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", (name, age)) -
作者帖子
正在查看 1 个帖子:1-1 (共 1 个帖子)
- 哎呀,回复话题必需登录。