Python 调用 sqlite3 实现数据库增删改查详解

Mason
Mason
发布时间:2026-10-12| 3人浏览过
原创

本文介绍如何利用 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 本地数据交互技巧的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。