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

news/2024/11/9 0:39:23/

文章目录

  • * 库表与管理
    • 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 sqlite3cn=sqlite3.connect('cust.db') # cn是连接对象
    print(type(cn)) # type(对象)返回对象类型
    cn.close() # 关闭数据库
    

在这里插入图片描述

1.2 创建表

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

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

  • 创建访问表的步骤:

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

    (2)创建游标cur。

    (3)执行创建表语句。

import sqlite3cn=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=1else:n=-1cn.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 = 0print('\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('谢谢使用,再见!')breakinput('回车继续...')

在这里插入图片描述


http://www.ppmy.cn/news/497887.html

相关文章

Web前端入门指南:必备知识与技能

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言HTML基础CSS样式与…

做快乐的程序员 - 在淘宝网的一次讲座

原文地址为: 做快乐的程序员 - 在淘宝网的一次讲座 同学们: 我要讲的,是怎样做快乐的程序员。什么是快乐的程序员呢?就是把编程当作兴趣和爱好的人,享受着编程的快乐的一群人。 优秀的程序员都是从快乐的程序员开始…

#Geek Point# 创业、艺术家和量子物理

这张头图必须要专门发一下先。 是最近最喜欢的一个物件了。就这张小小的东西,我每天能拿出来看好多次。随意涂抹的浓墨重彩里透出爱心形状的天,爱因斯坦和卓别林,这两位人类史上最厉害的科学家和表演艺术家,共同站立着举着牌&…

缔造微软帝国的程序员保罗·艾伦因病离世

(点击上方公众号,可快速关注) 综合整理:程序员的那些事(id: iProgrammer) 参考:CNBC、伯乐在线、瘦陀、新浪科技、维基百科 10 月 16 日,据美国 CNBC 报道,微软联合创始人…

做快乐的程序员 - 在淘宝网的一次讲座 [转自李战]

同学们: 我要讲的,是怎样做快乐的程序员。什么是快乐的程序员呢?就是把编程当作兴趣和爱好的人,享受着编程的快乐的一群人。 优秀的程序员都是从快乐的程序员开始的。因为,成为优秀的程序员是需要很长时间的磨练的&…

周遭心理学的应用-什么是心理学?

前言 这篇文章的标题如果去掉好处二字就显得并不吸引人,难道好处二字对我们的判断影响那么大吗?这又是为什么?(在引起共鸣的因素章节中,将会得到你要的答案) 每一篇文章,每一本书只要涉及到生活…

一个月面试大厂,中厂,小厂的总结|2021 年中总结

推荐:两年前端程序媛从0到18k的逆袭之路 | 2021年中总结 image.png 求点赞求分享求评论,哦耶!!!(基本工资有一部分花在付费学习上) (文末有彩蛋。。。)。一个朋友&#x…

keil5图标变成白色_图标设计全方位解读

之前分享过关于UI设计的文章《UI》从不同的角度解答了UI设计常见的问题;但作为电商设计师,平时在工作项目中接触更多的其实是图标设计。 图标设计是UI设计很重要的组成部分,在整个界面中虽然只占据很小的区域,却有着无可替代的作用,也很考验设计师的基本功。 因此了解图标…