用一个程序解决SQLite常见的各项操作(实用篇)

news2024/11/23 9:50:41

文章说明:

本篇文章是在之前的一篇文章SQLite3进行数据库各项常用操作基础上写的,将SQLite涉及到的常用的几种操作,以函数的形式处理成相互调用的形式。

在这里插入图片描述

因为之前的文章对基础操作已经解释过了,所以这里直接放置可执行代码和结果。

可执行代码展示

本程序的实现内容:

该代码是一个简易的用户信息管理系统,实现了对SQLite数据库中“person”表的基本操作。

具体功能包括:测试数据库连接、创建或确认“person”数据表的存在、向“person”表中增加用户信息、删除指定用户名的记录、以及显示“person”表中所有记录的功能。

用户可以通过终端菜单选择执行的操作,例如添加新的用户信息、删除某个特定的用户信息或者列出所有用户信息。

注意:所有对数据库的操作如添加、删除记录都会立即提交,确保数据的一致性与准确性。可以认为这是一个通过命令行交互,实现用户信息增删查的简单应用程序。

import sqlite3


# 测试连接数据库
def connect_db():
    # 连接数据库,参数指定数据库文件路径
    conn = sqlite3.connect(path_data)
    print('\n已连接上数据库...')
    # 随时关闭数据库连接
    conn.close()


# 执行SQL语句
def run_sql(sql):
    # 打开连接
    with sqlite3.connect(path_data) as conn:
        # 生成一个cursor对象
        curs = conn.cursor()
        # 执行SQL语句
        curs.execute(sql)
        # 事务提交
        conn.commit()
        # 返回插入或删除时,影响到的记录数,以此判断插入和删除是否成功
        return curs.rowcount


# 在数据库建一个数据表person
def create_table():
    # 建表语句
    vsql = '''
    CREATE TABLE IF NOT EXISTS person(
    ID INTEGER PRIMARY KEY  AUTOINCREMENT,
    name varchar2(10),
    sex char(2),
    age int,
    department varchar2(20),
    telephone varchar2(11),
    bz varchar(20)
);
    '''
    # 调用函数执行SQL语句
    run_sql(vsql)
    print('\n用户信息表新建成功!')


# 采集用户信息
def person_info():
    vname = input("请录入姓名:")
    vsex = input('请录入性别:')
    vage = input('请录入年龄:')
    vdepartment = input('请录入单位:')
    vtelephone = input('请录入电话号码:')
    vbz = input('请录入备注说明:')
    # 组合成SQL语句
    vsql = 'insert into person(name,sex,age,department,telephone,bz) values("' \
           + vname + '","' + vsex + '",' + vage + ',"' + vdepartment + '","' \
           + vtelephone + '","' + vbz + '")'
    print(vsql)
    # 返回SQL语句
    return vsql


# 增加一条记录
def add_row():
    # 取得SQL语句
    vsql = person_info()
    # 调用函数执行SQL语句,并取得返回值
    vcount = run_sql(vsql)
    # 如果返回值等于1,说明插入一条记录
    if vcount == 1:
        print('\n人员信息增加成功!')
    else:
        print('\n人员信息增加失败!')


# 删除一条记录
def del_row():
    vname = input("请录入要删除的人员姓名:")
    # 按照姓名条件,删除一条记录
    vsql = 'delete from person where name="' + vname + '"'
    print(vsql)
    # 调用函数执行SQL语句,并取得返回值
    vcount = run_sql(vsql)
    # 如果返回值等于1,说明删除了一条记录
    if vcount == 1:
        print('\n人员信息删除成功!')
    else:
        print('\n人员信息删除失败!')


# 显示数据表中的所有记录
def list():
    vsql = 'select * from person'
    with sqlite3.connect(path_data) as conn:
        curs = conn.cursor()
        curs.execute(vsql)
        ret = curs.fetchall()
    # 在终端上打印相关信息
    print('\n人员信息列表如下:')
    print('序号       姓名     性别      年龄    单位                    电话号码                  备注')
    print('-' * 90)

    for item in ret:
        print(str(item[0]).ljust(10), end='')
        print(item[1].ljust(9), end='')
        print(item[2].ljust(8), end='')
        print(str(item[3]).ljust(6), end='')
        print(item[4].ljust(20), end='')
        print(item[5].ljust(20), end='')
        print(item[6].ljust(20))
    print('\n')


# 主程序main
if __name__ == '__main__':
    path_data="data.db"

    # 给变量赋值提示信息
    v_menu = '''
    1、连接数据库
    2、构建一个用户信息表(person)
    3、向用户信息表中增加记录
    4、删除一条记录
    5、显示用户信息
    q、退出程序
    '''

    while True:
        # 列出菜单供用户选择
        print(v_menu)
        # 接受用户的选择
        v_choose = input('请选择相应的操作(1-5):')
        if v_choose == '1':
            # 连接数据库测试
            connect_db()
        elif v_choose == '2':
            # 生成一个数据表
            create_table()
        elif v_choose == '3':
            # 向数据表中加一条记录
            add_row()
        elif v_choose == '4':
            # 删除一条记录
            del_row()
        elif v_choose == '5':
            # 列举出数据表中的所有记录
            list()
        elif v_choose == 'q':
            break
        else:
            break

执行结果展示

下面的内容是根据提示,从1到5到q的输入和输出过程:

    1、连接数据库
    2、构建一个用户信息表(person)
    3、向用户信息表中增加记录
    4、删除一条记录
    5、显示用户信息
    q、退出程序
    
请选择相应的操作(1-5):1

已连接上数据库...

    1、连接数据库
    2、构建一个用户信息表(person)
    3、向用户信息表中增加记录
    4、删除一条记录
    5、显示用户信息
    q、退出程序
    
请选择相应的操作(1-5):2

用户信息表新建成功!

    1、连接数据库
    2、构建一个用户信息表(person)
    3、向用户信息表中增加记录
    4、删除一条记录
    5、显示用户信息
    q、退出程序
    
请选择相应的操作(1-5):3
请录入姓名:张张
请录入性别:男
请录入年龄:18
请录入单位:研究所所
请录入电话号码:123456789
请录入备注说明:爱学习
insert into person(name,sex,age,department,telephone,bz) values("张张","男",18,"研究所所","123456789","爱学习")

人员信息增加成功!

    1、连接数据库
    2、构建一个用户信息表(person)
    3、向用户信息表中增加记录
    4、删除一条记录
    5、显示用户信息
    q、退出程序
    
请选择相应的操作(1-5):5

人员信息列表如下:
序号       姓名     性别      年龄    单位                    电话号码                  备注
------------------------------------------------------------------------------------------
2         张小       男       18    信息中心                13562819***         一个程序员               
3         刘小       女       50    经营管理部               13562819***         成本管理员               
4         李三       男       44    办公室                 13562819***         秘书                  
5         李四       男       22    办公室                 13562819***         行政管理员               
6         李明       男       18    保安部                 13562819123         新员工                 
8         李四       女       22    保安部                 13562819456         新员工                 
9         李明       男       18    保安部                 13562819123         新员工                               
10       张张       男       18    研究所所                123456789           爱学习                 



    1、连接数据库
    2、构建一个用户信息表(person)
    3、向用户信息表中增加记录
    4、删除一条记录
    5、显示用户信息
    q、退出程序
    
请选择相应的操作(1-5):q


参考python编程100例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1559853.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常见6种开源协议比较

前言 常见的开源许可协议有6种是比较常见和广泛使用的,每种协议都有其特定的使用场景和约束条件。这6种分别是GPL, LGPL,MIT许可证, Apache许可证,BSD许可证和Mozilla Public License(MPL). 6种开源许可协议…

深度学习评价指标(1):目标检测的评价指标

1. 简述 在计算机视觉/深度学习领域,每一个方向都有属于自己的评价指标。通常在评估一个模型时,只需要计算出相应的评价指标,便可以评估算法的性能。同时,所谓SOTA,皆是基于某一评价指标进行的评估。 接下来&#xff0…

GitHub - 使用SSH进行连接

文章目录 前言开发环境单个SSH密钥1.1. 生成SSH密钥1.2. 添加SSH密钥1.3. 测试SSH连接2.1. 简化密钥密码输入 多个SSH密钥1.1. 生成/添加/测试SSH密钥2.1. 简化密钥密码输入 无密码密钥补充内容最后 前言 有一个SSH密钥跟了我很多年,更换电脑也不曾更换它。它不需要…

腾讯云轻量2核2G3M云服务器优惠价格61元一年,限制200GB月流量

腾讯云轻量2核2G3M云服务器优惠价格61元一年,配置为轻量2核2G、3M带宽、200GB月流量、40GB SSD盘,腾讯云优惠活动 yunfuwuqiba.com/go/txy 活动链接打开如下图: 腾讯云轻量2核2G云服务器优惠价格 腾讯云:轻量应用服务器100%CPU性能…

QT初识(1)

QT初识 桌面开发什么是QT下载QT安装好之后的工具AssisantDesignerQT Creator 创建一个简单的项目 我们今天来认识一下QT。 桌面开发 在了解QT,我们得了解一下桌面开发: 桌面开发指的是编写和构建在个人计算机或其他桌面操作系统(如Windows、…

论文笔记 - :MonoLSS: Learnable Sample Selection For Monocular 3D Detection

论文笔记✍MonoLSS: Learnable Sample Selection For Monocular 3D Detection 📜 Abstract 🔨 主流做法限制 : 以前的工作以启发式的方式使用特征来学习 3D 属性,没有考虑到不适当的特征可能会产生不利影响。 🔨 本…

全面概述Gitee和GitHub生成/添加SSH公钥

前言 现如今将代码开源已经成为软件开发行业的一种趋势,而现在比较有名的代码托管平台有GItHub、Gitee、Gitlab等相关平台。而我们在使用代码托管平台最为常见的就是如何将自己本地的代码推送到远程托管平台中的仓库中,现如今各大托管平台基本上都提供了…

鸿蒙手机cordova-plugin-camera不能拍照和图片不显示问题

鸿蒙手机cordova-plugin-camera不能拍照和图片不显示问题 一、运行环境 1、硬件 手机型号:NOVA 7 系统:HarmonyOS版本 4.0.0 2、软件 android SDK platforms:14.0(API Level 34)、13.0(API Level 33) SDK Build-T…

jvm类加载机制概述

、什么是jvm的类加载机制 类加载机制是指我们将类的字节码文件所包含的数据读入内存,同时我们会生成数据的访问入口的一种 特殊机制。那么我们可以得知,类加载的最终产品是数据访问入口。 加载类文件(即.class文件)的方式有以下几…

一些基本类上实用的注解及例子

文章目录 一些基本类上实用的注解及例子一、Data二、Accessors三、AllArgsConstructor四、NoArgsConstructor五、EqualsAndHashCode六、后面在补充!先这样吧,哈哈!总结 一些基本类上实用的注解及例子 一、Data Data 注解是一个组合注解&…

Django源码之路由的本质(上)——逐步剖析底层执行流程

目录 1. 前言 2. 路由定义 3. 路由定义整体源码分析 3.1 partial实现path函数调用 3.2 图解_path函数 3.3 最终 4.URLPattern和Pattern的简单解析 5. 小结 1. 前言 在学习Django框架的时候,我们大多时候都只会使用如何去开发项目,对其实现流程并…

linux 软中断入门

在 linux 中,任务执行的载体有很多,包括线程,中断,软中断,tasklet,定时器等。但是从本质上来划分的话,任务执行的载体只有两个:线程和中断。软中断和 tasklet 的执行可能在中断中&am…

云服务器8核32G配置报价大全,腾讯云、阿里云和京东云

8核32G云服务器租用优惠价格表,云服务器吧yunfuwuqiba.com整理阿里云8核32G服务器、腾讯云8核32G和京东云8C32G云主机配置报价,腾讯云和京东云是轻量应用服务器,阿里云是云服务器ECS: 阿里云8核32G服务器 阿里云8核32G服务器价格…

9.动态规划——2.最大序列和

例题——最大序列和 找状态 思路一() 定义一个状态 d p [ i ] dp[i] dp[i],计为前i个数构成子序列和的最大值 此法状态转移比较困难,即若 d p [ i ] dp[i] dp[i]与 d p [ i − 1 ] dp[i-1] dp[i−1]没有明确的关系,有…

获取电商数据的几种方法分享

在数字化时代,电商数据已经成为企业决策的重要依据。无论是市场趋势的洞察、用户行为的分析,还是产品优化和营销策略的制定,都离不开电商数据的支持。本文将分享几种获取电商数据的有效方法,力求在干货满满的同时,也不…

PyCharm中出现Microsoft Defender配置建议

原因 Windows安全中心的病毒和威胁防护会自动扫描电脑中的文件夹,我们的项目文件夹和IDE文件夹也会被扫描,而PyCharm认为这会降低IDE性能。 解决方法 直接点击提示框里的自动。 或是手动给扫描添加排除项,步骤如下: 1、先打开…

Sui原生功能如何改变链上游戏体验

从zkLogin到可编程交易区块(PTB),Sui的原生功能为游戏开发人员提供了工具,最终利用了Web3的力量,给玩家带来了新的体验和参与度。之前的区块链在支持链上游戏方面存在技术上的局限,但是Sui提供了开发人员所…

受益于边缘计算的三个关键应用

边缘计算和 5G 网络正在改变物联网,增强跨多个领域的广泛应用的功能,并催生大量新兴应用。我们通过研究三个突出的用例来说明边缘计算的强大功能。 工业4.0智能工厂 工业 4.0 为制造商提供了基于灵活的工业环境提高生产力和盈利能力的愿景,…

AR-Net网络(图像篡改检测)

AR-Net网络 摘要AbstractAR-Net1. 文献摘要2. 研究背景3. 创新点4. AR-Net 网络架构5. 实验6. 结论总结 摘要 AR-Net使用自适应注意力机制来融合位置和通道维度的特征,使网络能够充分利用不同维度的被篡改特征,此外,AR-Net 改进了预测掩模&a…

牛客NC92 最长公共子序列(二)【中等 动态规划 Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/6d29638c85bb4ffd80c020fe244baf11 思路 https://blog.csdn.net/qq_36544411/article/details/120021203 思路 动态规划法, 我们以dp[i][j]表示在s1中以第i个元素结尾,s2中以第j个元素结…