【Python】数据库(创建库 访问 连接 创建表 编辑记录 案例:客户管理实现)

news2024/9/30 11:51:07

文章目录

  • * 库表与管理
    • 1.访问数据库
      • 1.1 连接与创建数据库
      • 1.2 创建表
      • 1.3 编辑表记录
        • 1.3.1 添加记录
        • 1.3.2 修改记录
        • 1.3.3 返回所有记录
        • 1.3.4 删除记录
        • 1.3.5 查询记录
      • 1.4 案例:客户管理 SQLite 实现

* 库表与管理

1.访问数据库

SQLite 是 Python 自带的数据库管理模块(sqlite3)。不用额外安装

1.1 连接与创建数据库

连接=sqlite3.connent(数据库)
  • 如果数据库存在,访问并连接;

    如果不存在,自动创建并连接。

    import sqlite3
    
    cn=sqlite3.connect('cust.db') # cn是连接对象
    print(type(cn)) # type(对象)返回对象类型
    cn.close() # 关闭数据库
    

在这里插入图片描述

1.2 创建表

  • 访问表时,要把表转入内存的缓冲区,再对缓冲区的数据进行操作。

    因此,定义一个指向缓冲区的指针(即:游标),来访问缓冲区的数据。

  • 创建访问表的步骤:

    (1)创建数据库连接cn。

    (2)创建游标cur。

    (3)执行创建表语句。

import sqlite3

cn=sqlite3.connect('cust.db') # 连接数据库
cur=cn.cursor() # 设置游标: 游标名=连接.cursor()
# 创建表的sql语句
sqls='create table cust(cid text(4),cname text(10),cage integer(2))'
cur.execute(sqls) # 游标.execute(sql) 在游标所指向的数据库中执行sql语句

# 删除表
cur.execute('drop table cust')

1.3 编辑表记录

1.3.1 添加记录

  • 添加记录,可以添加整个记录;

    也可以添加部分内容(需声明属性及其值)。

游标.execute('insert into cust(cid,cname,cage) values("c002","tim",17)')
# 查看记录个数
游标.rowcount()
  • 添加记录可以使用参数?
  • 如果需要一次添加多个记录,则可以使用添加 cur.executemany()。
cur.executemany('insert into cust values(?,?,?)',[("c005","Mar",19), ("c006","Nar",20)])

1.3.2 修改记录

cur.execute('update cust set cage=20 where cid="c001"')
cn.rollback() # 撤销最后一次修改
cn.commit() # 必须把缓冲区的数据写回数据库,否则修改无效。

1.3.3 返回所有记录

记录集=cur.fetchall()
print(记录集)
rs=cur.fetchall()
print(rs)
# 运行结果:
[('c001', 'tom', 16), ('c002', 'tim', 17), ('c003', 'jim', None), ('c004', 'jon', 18), ('c005', 'Mar', 19), ('c006', 'Nar', 20)]

1.3.4 删除记录

游标.execute('delete from cust where cid="c003"')

1.3.5 查询记录

游标.execute('select cid,cname from cust where cid="c006"')

返回一个记录:cur.fetckone()。
返回 n 个记录:cur.fetckmany([n])。n:返回记录的个数(默认:1)。
返回所有记录:cur.fetchall()

1.4 案例:客户管理 SQLite 实现

题目要求:
	
使用 Python 和 sqlite3,实现如下迷你客户信息管理系统。
(1)具有添加、修改、删除、查询、显示客户和帮助信息等功能。
(2)菜单显示内容如下:
客户管理
========
1. 添加客户
2. 修改客户
3. 删除客户
4. 查询客户
5. 显示客户
6. 清空客户
7. 帮助信息
8. 退出系统
========
import sqlite3

# 查找客户
def find(no): # 查找编号为no的客户
    cn=sqlite3.connect('Cust.db') # 连接数据库
    cur=cn.execute('select* from Cust where cno=?',(no,))# 在数据表中查询编号为no的客户
    Cust=cur.fetchall() # 返回所有符合条件的记录
    # n=1表示查找成功,=-1则没有编号为no的客户
    if len(Cust)>0:
        n=1
    else:
        n=-1
    cn.close()
    return n

# 添加客户
def appe():
    cn=sqlite3.connect('Cust.db')
    cno=input('输入户号:')
    if cno=='':
        print('户号无效!')
    else:
        if find(cno)==1:
            print('户号已存在,重新添加!')
        else:
            cname=input('输入户名:')
            if cname=='':
                print('户名无效!')
            else:
                cn.execute('insert into Cust values(?,?)',(cno,cname))
                cn.commit() # 把缓冲区的数据写回数据库,否则修改无效。
                print('添加成功!')
            cn.close()

# 修改客户
def alter():
     cn=sqlite3.connect('Cust.db')
     cno=input('输入户名:')
     if find(cno)==-1:
        print('查无此人!')
     else:
        print('原户号:%s'%cno)
        nid=input('输入新户号:')
        if nid=='':
            print('户号无效!')
        else:
            if find(nid)==1:
                print('客户存在!')
            else:
                cname=input('输入新户名:')
                if cname=='':
                    print('户名无效!')
                else:
                    cn.execute('update Cust set cno=?,cname=?where cno=?',(nid,cname,cno))
                    cn.commit()
                    print('修改成功!')
     cn.close()

# 删除客户
def dele():
    cn=sqlite3.connect('Cust.db')
    cno=input('输入户号:')
    if find(cno)==-1:
        print('查无此人!')
    else:
        print('户号:%s'%cno)
        yn=input('确定删除(y/n)?')
        if yn=='y':
            cn.execute('delete from Cust where cno=?',(cno,))
            cn.commit()
            print('删除成功!')
        else:
            print('删除失败!')
    cn.close()

# 查找客户
def seek():
    cn = sqlite3.connect('Cust.db')
    cno = input('输入户号:')
    if find(cno) == -1:
        print('查无此人!')
    else:
        cur = cn.execute('select * from Cust where cno=?', (cno,))
        tm = cur.fetchone()
        print('查询结果:')
        print('户号:%s' % tm[0])
        print('户名:%s' % tm[1])
    cn.close()

# 显示所有客户
def disp():
    cn = sqlite3.connect('Cust.db')
    cur = cn.execute('select * from Cust')
    Cust = cur.fetchall()
    if len(Cust) == 0:
        print('没有客户!')
    else:
        print('客户信息:')
    n = 0
    print('\t ', '户号', '\t', '户名')
    for u in Cust:
        for a in u:
            print('\t ', a, end='')
        print()
    cn.close()

# 删除客户
def delall():
    cn = sqlite3.connect('Cust.db')
    cn.execute('drop table if exists Cust')
    cn.execute('create table Cust(cno text primary key,cname text)')
    cn.close()
    print('客户已空!')

# 帮助信息
def helpc():
    print('请按照菜单执行!')

def crea():
    cn = sqlite3.connect('cust.db')  # 连接数据库
    cur = cn.cursor()  # 设置游标: 游标名=连接.cursor()
    # 创建表的sql语句
    sqls = 'create table cust(cno text(4),cname text(10))'
    cur.execute(sqls)  # 游标.execute(sql) 在游标所指向的数据库中执行sql语句
    print('创建成功!')

# 主函数
while 1:
     print(' 客户管理')
     print('========')
     print('1. 添加客户')
     print('2. 修改客户')
     print('3. 删除客户')
     print('4. 查询客户')
     print('5. 显示客户')
     print('6. 清空客户')
     print('7. 帮助信息')
     print('8. 退出系统')
     print('9. 创建数据库和客户表')
     print('========')
     yn=input('选择输入(1,2,3,4,5,6,7,8):')
     if yn=='1':
        appe()
     elif yn=='2':
        alter()
     elif yn=='3':
        dele()
     elif yn=='4':
        seek()
     elif yn=='5':
        disp()
     elif yn=='6':
        delall()
     elif yn=='7':
        helpc()
     elif yn=='9':
         crea()
     else:
        print('谢谢使用,再见!')
        break
     input('回车继续...')

在这里插入图片描述

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

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

相关文章

SpringBoot 如何使用 Spring Cloud Stream 处理事件

SpringBoot 如何使用 Spring Cloud Stream 处理事件 在分布式系统中,事件驱动架构(Event-Driven Architecture,EDA)已经成为一种非常流行的架构模式。事件驱动架构将系统中的各个组件连接在一起,以便它们可以相互协作…

【深度学习】5-4 与学习相关的技巧 - 正则化解决过拟合(权值衰减,Dropout)

机器学习的问题中,过拟合是一个很常见的问题。过拟合指的是只能拟合训练数据,但不能很好地拟合不包含在训练数据中的其他数据的状态。机器学习的目标是提高泛化能力,即便是没有包含在训练数据里的未观测数据也希望模型可以进行正确的识别。 …

皓文电子 | 智能制造领先企业的安全服务经验分享

皓文电子是一家为客户提供设计、生产、销售高端开关电源及各类功率变换产品的国家级高新技术企业,是国内智能制造领域的代表企业。其核心产品能与国际主流电源厂商竞争,达到国内外领先水平,并在国家多个重点项目中批量生产装备。 遭遇安全事件…

2023年湖北孝感初、中级工程师职称报名条件和要求是什么?启程别

2023年湖北孝感初、中级工程师职称报名条件和要求是什么?启程别 初级职称对于找工作很有帮助。现在,学历越来越高,仅有学历已经不能满足应聘需求。初级职称的获得并不难,有了职称也会让自己在找工作时更有竞争力。威信公号搜一下启…

2023年最新智能优化算法之——IBI逻辑优化算法(IBL),附MATLAB代码

今天给大家带来一个有意思的智能优化算法,IBL算法。 先说效果:在CEC2005函数集测试,基本上毫无压力,把把都能预测的很准确,而且速度极快。大家可以自行尝试哈。 为啥说这个算法有意思呢,大家看IBL的英文全…

史上最大图灵测试实验完成150万人类参与1000万次对话,判断对面是人还是AI

本文 介绍 了AI 21实验室推出了一个好玩的社交图灵游戏——「人类还是机器人?」 【导读】这个「人类还是AI?」的游戏一经推出,就被广大网友们玩疯了!如今全世界已有150万人参与,网友们大方分享自己鉴AI的秘诀。 历上规模最大的…

解决:torch.cuda.is_available()一直返回False,显卡是NVIDA GeForce MX250

目录 1. 背景2. 发现问题根源3. 解决问题 1. 背景 AI时代了,之前一直不怎么用到的小米笔记本Pro的 NVIDA GeForce MX250独显,就想着让它发挥余热,免得买了这么多年,一直闲置,浪费。 无脑按照chatGPT给的例子&#x…

为什么Django要引入CSRF令牌?答:主要是为了防止跨站伪造请求攻击,那么什么是跨站伪造请求攻击呢?

“CSRF”的英文全称是:“Cross-Site Request Forgery”,翻译过来就是:“跨站请求伪造”。 那么什么是跨站伪造请求攻击呢?看下面这张图就够了。 注意:看上面这张图请按图中标注的1到6的顺序阅读。 Django通过引入CS…

一文详解!接口自动化的关键思路和解决方案

目录 引言 正文 一.接口传参 二. 外部数据源 三. 测试断言 四. 环境切换 五. 批量测试 总结 一.接口自动化的工具思维和测试思维 二.贯穿整个接口自动化项目的三个基本思路: 引言 与UI相比,接口一旦研发完成,通常变更或重构的频率…

使用nps搭建内网穿透服务

使用nps搭建内网穿透服务 如何使用nps搭建内网穿透服务前提准备操作流程配置服务端配置客户端 P2P模式,大流量低延迟 正式开始之前呢,先介绍一下什么是内网穿透: 内网穿透(NAT穿透)是一种技术,它允许您通过…

软件测试简历编写以及软件测试面试题大全

目录 前言: 一、简历重要性以及编写原则 二、简历模板 三、简历包装 四、互联网公司常用接口测试面试题 五、互联网公司常面自动化测试面试题 前言: 软件测试是软件开发过程中必不可少的一环,也是一个不断发展和变化的领域。在寻找软件测试职…

广角积分球均匀光源

现阶段,摄影测量技术已涉及多行多业,其在交通、考古以及景物三维重建中的应用尤为显著,但是普通相机取景范围有限,不能全面捕获整个空间信息,因此一种新型相机--全景相机逐步被应用到实际当中。80年代初,国…

场景解析丨活用PDCA循环,让你的项目管理更高效!

聚焦制造业共性项目管控难题 结合装备制造行业特性, 从PDCA循环角度, 通过痛点、解决方案、实际案例的剖析, 看企业如何做好项目管理。 本期干货内容分享 1. 计划的可执行性 计划要达成共识,打造合理三级计划体系 2. 执行的…

Android预装apk

预装APK到system/app目录 注:APK名字不能含有中文、空格等特殊字符。 在 驱动路径/android/vendor/aw/public/prebuild/apk 创建一个目录存放对应的APK将所需预装的APK放入该目录中在该目录中创建 Android.mk文件,并编译 # 文件名 LOCAL_PATH : $(call…

supervisor简介

1、概述 supervisor是一个用python语言编写的进程管理工具,它可以很方便的监听、启动、停止、重启一个或多个进程。当一个进程意外被杀死,supervisor监听到进程死后,可以很方便的让进程自动恢复,不再需要程序员或系统管理员自己编…

回调函数(callback)是什么?一文理解回调函数(callback)

这里写目录标题 一、什么是回调函数1.1、回调函数的定义和基本概念1.2、回调函数的作用和使用场景 二、回调函数的实现方法2.1、函数指针2.2、函数对象/functor2.3、匿名函数/lambda表达式 三、回调函数的应用举例四、回调函数的优缺点五、回调函数与其他编程概念的关系5.1、回…

性能提升30%!袋鼠云数栈基于 Apache Hudi 的性能优化实战解析

Apache Hudi 是一款开源的数据湖解决方案,它能够帮助企业更好地管理和分析海量数据,支持高效的数据更新和查询。并提供多种数据压缩和存储格式以及索引功能,从而为企业数据仓库实践提供更加灵活和高效的数据处理方式。 在金融领域&#xff0…

Mysql高阶语句(一)

Mysql高阶语句(一) 一、MySQL高级进阶SQL 语句1、SELECT斜体样式2、DISTINCT3、WHERE4、AND、OR5、IN6、BETWEEN7、通配符、LIKE8、ORDER BY9、| | 连接符10、GROUP BY11、HAVING 二、函数1、数学函数2、聚合函数3、字符串函数4、日期时间函数 一、MySQL…

短视频矩阵源码

短视频矩阵源码的开发部署其实并不难,主要依托于抖音平台各种开放权限进行研发,市面上常见的源码功能构建也是大同小异,主要处理还在于细节及产品优化上。 如: 1. 视频制作板块,文字转语音功能,当然各种云&…

【人工智能技术专题】「入门到精通系列教程」零基础带你进军人工智能领域的全流程技术体系和实战指南(NLP、GPT-Pre-Training和数据标注都是什么)

零基础带你进军人工智能领域的全流程技术体系和实战指南(NLP、GPT-Pre-Training和数据标注都是什么) 前言专栏介绍专栏说明学习大纲前提条件面向读者学习目标核心内容NLP自然话言理解指的是什么定义概念涉及到的领域技术与应用关系 重要性语言结构剖析分…