Python 调用 sqlite3 实现数据库增删改查详解
本文介绍如何利用 Python 内置的 sqlite3 模块连接本地数据库并创建数据表。通过完整的示例代码,逐步演示如何安全地插入用户信息、按编号删除记录、更新现有数据以及查询指定内容,帮助开发者快速掌握 SQLite 的基础交互逻辑与防注入规范。
SQLite3 基础连接与表结构初始化
Python 标准库已内置 sqlite3 模块,无需额外安装即可直接调用。在实际项目中,首次运行脚本时通常需要先建立数据库文件连接,并使用 CREATE TABLE IF NOT EXISTS 语句自动完成数据表的初始化,避免重复创建导致的报错。以下为包含核心业务逻辑的完整实现流程。
使用 Python 调用 sqlite3 完成数据增删改查
第1步:初始化连接与创建数据表
目的:建立持久化存储通道并构建基础字段。
入口:运行脚本主程序。
动作:调用 sqlite3.connect() 生成连接对象,执行建表 DDL 语句。
import sqlite3
def opendata():
conn = sqlite3.connect("mydb.db")
cur = conn.execute("""CREATE TABLE IF NOT EXISTS tianjia (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username VARCHAR(128),
password VARCHAR(128),
address VARCHAR(125),
telnum VARCHAR(128)
)""")
return cur, conn
重要参数:mydb.db(本地文件路径,不存在则自动创建)、AUTOINCREMENT(自增主键)。
完成状态:控制台无异常抛出,当前目录下生成 mydb.db 空文件。
第2步:执行参数化插入操作
目的:采集终端输入并将安全写入数据表,规避拼接风险。
入口:菜单选项“添加”。
动作:调用 input() 获取四段文本,使用占位符 ? 绑定参数后提交事务。
def adddata():
print("---------欢迎使用添加数据功能---------")
p = (input("用户名:"), input("密码:"), input("地址:"), input("电话:"))
cur, conn = opendata()
conn.execute("INSERT INTO tianjia(username, password, address, telnum) VALUES (?, ?, ?, ?)", p)
conn.commit()
print("数据添加成功")
conn.close()
重要参数:(?, ?, ?, ?) 占位序列,commit() 强制落盘。
完成状态:控制台返回“数据添加成功”,且再次查询可见最新记录。
第3步:按主键条件删除与覆盖修改
目的:根据业务需求移除冗余数据或更正旧字段值。
入口:菜单选项“删除”或“修改”。
动作:接收用户输入的 id 字符串并校验类型,组装 DELETE 或 UPDATE 语句并执行。
def modify_records(action_type):
try:
target_id = int(input("请输入目标用户编号:"))
cur, conn = opendata()
if action_type == "DEL":
conn.execute("DELETE FROM tianjia WHERE id = ?", (target_id,))
print("记录已删除")
else:
new_data = (input("新用户名:"), input("新密码:"), input("新地址:"), input("新电话:"))
conn.execute("UPDATE tianjia SET username=?, password=?, address=?, telnum=? WHERE id=?", (*new_data, target_id))
print("记录已更新")
conn.commit()
conn.close()
except ValueError:
print("编号必须为有效整数")
# 调用示例
modify_records("DEL")
重要参数:int(input()) 强转拦截非法字符、WHERE id = ? 精准定位行级数据。
完成状态:目标 id 的行被物理删除或字段覆盖,后续查询不再显示旧值。
第4步:精准查询与结构化打印
目的:过滤全量视图,定向输出单条或多条匹配记录。
入口:菜单选项“查询”。
动作:传入条件参数,调用 fetchone() 或 fetchall() 提取元组,遍历渲染。
def searchdata():
try:
query_id = int(input("请输入查询编号:"))
cur, conn = opendata()
cur.execute("SELECT * FROM tianjia WHERE id = ?", (query_id,))
row = cur.fetchone()
if row:
print(f"编号:{row[0]} | 用户:{row[1]} | 地址:{row[3]} | 电话:{row[4]}")
else:
print("未找到对应数据")
conn.close()
except ValueError:
print("请输入有效数字编号")
重要参数:fetchone() 仅取首条匹配项,节省内存开销。
完成状态:屏幕仅打印符合 id 约束的字段映射,未命中则友好提示。
操作验证与常见排错
编写或迁移此类脚本时,请注意以下关键点以保障稳定性:
1. 版本兼容:原始参考代码基于 Python 2 语法(如 print "文字" 和 raw_input()),现行环境需同步升级至 Python 3(使用 print() 函数与 input())。
2. SQL 注入防御:原逻辑采用字符串直接拼接(如 +delchoice)极易引发语法错误或安全隐患,重构后全面替换为 ? 占位符配合元组传参,确保数据类型隔离。
3. 连接泄漏处理:多次调用 opendata() 时需确保在业务流程末尾显式调用 conn.close(),或在生产环境中改用 with 上下文管理器自动回收资源。
以上就是 Python 调用 sqlite3 实现数据库增删改查的详细内容,更多关于 Python 本地数据交互技巧的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













