版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九章数据库应用开发1常州工业职业技术学院19五月2026Python程序设计丁辉袁凯烽商俊燕韩少勇范晓玲郝亚平王霞俊吴春晖目录
Contents01Python数据库应用程序开发简介02SQLite数据库03数据库应用程序开发精选案例0407小结2Python数据库应用程序开发简介014结构化数据库非结构化数据库数据库分类数据库(DBdatabase)是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数学模型组织、描述和存储,具有较小的冗余、较高的数据独立性和易扩展性,并可为各种用户共享。平时所说的数据库实际上是包含了数据库管理系统的。数据数据库管理系统是为管理数据库而设计的软件系统,一般具有查询、存储、截取、安全保障和备份等功能。5Python程序要访问数据库,需要通过数据库访问接口,即PythonDBAPI。通过PythonDBAPI访问数据库,只需要开发者学习API,了解基本的数据库操作命令,即可编程对数据库进行操作。而且由于不同数据库的API使用流程基本相同,所以开发者只要会一种数据库的访问,就可扩展到其它数据库。PythonDBAPI使用流程如下:引入API模块建立连接创建游标对象执行数据库语句关闭数据库连接注:不同的数据库,需要引入不同的API,如:MySQL数据库对于Python3需要引入pymysql或者是MySQLdb模块。PythonDBAPI使用流程6SQLite数据库028SQLite是一款轻型、开源的嵌入式关系数据库,使用一个文件存储整个数据库,操作十分方便,减少了应用程序管理数据的开销,可移植性好,很容易使用,效率高且可靠。作为嵌入式数据库直接在应用程序进行中运行,不需要服务器,提供了零配置运行模式,资源占用少。SQLite数据库基本的数据类型见下表数据类型说
明示
例Null空值NULLInteger整数1,100,-21,432111344Real浮点数1.0,0.4,-34,83.44333Text字符串‘hello’,’student’,’你好’Blob一个blob数据,根据它的输入存储一个图片,一首歌,一个ZIP文件1.SQLite数据库基本数据类型Integer整型包括基本整型、长整型等,即只要是整数,都用Integer表示。Blob二进制类型用于存放图片、声音、视频等二进制文件。9SQLite命令类似于SQL,包括CREATE、SELECT、INSERT、UPDATE、DELETE、ALTER和DROP等。编号用户名密码1ding1234562wang78912343zhang874376438SQLite命令应用示例数据2.SQLite数据库的基本操作命令10创建数据库命令命令格式:sqlite3xxx.db;功能:创建一个数据库示例:sqlite3xsgl.db;创建表命令命令格式:createtabledatabase_name.table_name(column1datatype[primarykey(oneormorecolumns)],column2datatype,……,coiumnNdatatype);功能:在指定的数据库里创建一个表,表可以有多列,每一列需要有列名和类型说明,“primarykey(oneormorecolumns)”选项是用于指定表的主键示例:示例数据各列定义如下:编号:id,integer,主键用户名:name,text密码:pwd,textcreatetablexsgl.users(idintegerprimarykey,nametext,pwdtext);所有的语句以分号“;”结束SQLite3的命令不区分大小写2.SQLite数据库的基本操作命令11删除表命令命令格式:droptabledatabase_name.table_name;功能:从指定的数据库中删除指定的表插入记录命令命令格式:insertintotable_name[(column1,column2,……columnN)]values(value1,value2,……,valueN);功能:向表内插入记录信息,当省略“(column1,column2,……columnN)”选项时,表示按创建表时列的顺序依次输入对应的值,如果有“(column1,column2,……columnN)”选项时,则按选项中列出来的列顺序依次插入对应的值示例:将示例数据表的三条记录依次插入到表中:insertintousersvalues(1,”ding”,”123456”);insertintousers(id,pwd,name)values(2,”7891234”,”wang”);insertintousers(id,name,pwd)values(3,”zhang”,”874376438”);2.SQLite数据库的基本操作命令12查询记录命令命令格式:selectcolumn1[,column[,……,column]]/*fromtable_namewhere[condition];功能:对表按一定的条件进行查询,列出满足条件的记录,产生出一个新的表(查询结果),如果是“*”,则表示列出所有的列,否则是列出命令中给出的列,如果没有”condition”选项,则表示没有查询条件示例:select*fromusers;更新记录命令命令格式:updatetable_namesetcolumn1=value1[,column2=value2[,……columnN=valueN]]where[condition];功能:对满足条件记录的相关字段,按给定的值进行修改示例:updeteuserssetname=”dinghui”whereid=1;删除记录命令命令格式:deletefromtable_namewhere[condition];功能:删除指定表内符合条件的记录示例:deletefromuserswherename=”wang”;2.SQLite数据库的基本操作命令13数据库的基本操作流程:导入sqlite3模块>>>importsqlite3建立与数据库的连接>>>con=sqlite3.connect("d:\\py\\xsgl.db")建立游标>>>cur=con.cursor()执行数据库语句(命令)在Python中,所有的SQLite语句的执行,都是通过execute()方法进行的,即将SQLite语句作为execute()的参数,并用引号括起来。关闭游标和连接cur.close()con.close()3.SQLite数据库的基本操作如果*.db不存在,则自动创建14#在数据库xsgl.db里创建示例数据所示的用户管理表users>>>cur.execute("createtableusers(idintegerprimarykey,nametext,pwdtext)")#向表users里添加记录>>>cur.execute('insertintousersvalues(1,"ding","123456")')>>>cur.execute('insertintousers(id,pwd,name)values(2,"7891234","wang")')>>>cur.execute('insertintousers(id,name,pwd)values(3,"zhang","874376438")')#上述命令正确执行后,会显示如下的提示:<sqlite3.Cursorobjectat0x000000000302EC00>#查询记录>>>cur.execute("select*fromusers")3.SQLite数据库的基本操作15#查询语句执行的结果,要在执行命令提交后,才能通过fetchall()获取#提交事务,通过调用数据库连接对象的commit()方法来向数据提交SQLite命令执行的结果>>>mit()#获取查询结果#Python中通过fetchall()方法获取查询结果,每条记录是以元组的形式返回,全部结果构成一个列表>>>result=cur.fetchall()>>>result[(1,'ding','123456'),(2,'wang','7891234'),(3,'zhang','874376438')]#修改记录>>>cur.execute("updateuserssetname='dinghui'whereid=1")>>>cur.execute("select*fromusers")>>>mit()>>>result=cur.fetchall()>>>result[(1,'dinghui','123456'),(2,'wang','7891234'),(3,'zhang','874376438')]3.SQLite数据库的基本操作16#关闭数据库的连接>>>cur.close()>>>con.close()#删除记录>>>cur.execute("deletefromuserswherename='zhang'")>>>cur.execute("select*fromusers")>>>mit()>>>result=cur.fetchall()>>>result[(1,'dinghui','123456'),(2,'wang','7891234')]3.SQLite数据库的基本操作17数据库应用程序开发精选案例0319【例9-1】请编程创建一个xsgl.db数据库,并完成学生信息表和课程信息表的添加。分析:本例就是将前述有关数据库的操作组合起来,编写一个程序,连续执行,同时由用户通过键盘来输入两个表里的信息。每个表的输入以“-1”作为结束标志。课程编号课程名称任课教师学时0304001C语言陈明480304002Python语言许月480201001电工学高朋飞360202004电子技术刘露36学号姓名性别年龄入学时间201713093李静女192017.9201623284许明男182016.9201646734蒋欢欢男192016.9201758743张凯男182017.9学生信息表课程信息表学生信息表定义如下:学号:id,integer,primarykey姓名:name,text性别:sex,text年龄:age,integer入学时间:intake,text课程信息表定义如下:课程编号:code,integer,primarykey课程名称:course,text任课教师:teacher,text学时:hour,integer例9-120#eg9_1.pyimportsqlite3
#创建数据库xsgl.dbxsgl=sqlite3.connect("d:\\py\\xsgl.db")
#创建游标cur=xsgl.cursor()
#创建学生信息表cur.execute("createtableifnotexists
xsxx(idintegerprimarykey,nametext,sextext,ageinteger,intaketext)")#清空所有的记录cur.execute("deletefromxsxx")#循环输入记录whileTrue:id=int(input("请输入学号,-1表示结束输入:"))ifid==-1:breakname=input("请输入学生姓名:")sex=input("请输入学生性别:")age=int(input("请输入学生年龄:"))intake=input(“请输入入学时间(如:2017.5):")
insert="insertintoxsxx(id,name,sex,age,intake)values(?,?,?,?,?)"v=(id,name,sex,age,intake)cur.execute(insert,v)
#通过查询输出来查看表记录的输入是否正确cur.execute("select*fromxsxx")mit()record=cur.fetchall()print(record)例9-121#创建课程信息表cur.execute("createtableifnotexists
kcxx(codeintegerprimarykey,coursetext,teachertext,hourinteger)")#清空所有的记录cur.execute("deletefromkcxx")#循环输入记录whileTrue:code=int(input("请输入课程编号,-1表示结束输入:"))ifcode==-1:breakcourse=input("请输入课程名称:")teacher=input("请输入任课教师:")hour=int(input("请输入学时:"))
insert="insertintokcxx(code,course,teacher,hour)values(?,?,?,?)"v=(code,course,teacher,hour)cur.execute(insert,v)
#通过查询输出来查看表记录的输入是否正确cur.execute("select*fromkcxx")mit()record=cur.fetchall()print(record)usr.close()xsgl.close()①“ifnotexists”表示当表不存在时,才在数据库里创建,否则就不需要创建,这样做可以保证以前创建的表,不需要重复创建。②“cur.execute(”deletefromkcxx“)”,这条语句是删除以前表里所有的记录,以确保表里只保存本次输入的记录。③“insert=”insertintokcxx(code,course,teacher,hour)values(?,?,?,?)“、v=(code,course,teacher,hour)、cur.execute(insert,v)”这三条语句,实现把键盘输入的记录信息,插入到表里。例9-122【例9-2】请编写一个通讯录管理系统,具有数据录入、编辑和查看等功能。序号姓名电话QQ备注1张平1387443324392839北京2许晴1276373637627834天津3蒋明华18947364764476473上海信息录入界面编辑界面查看界面具有“常用”、“帮助”两个主菜单,“常用”菜单下包含“查看、录入、编辑、退出”四个子菜单,“帮助”菜单下含有“关于…、帮助”2个子菜单。通讯录保存的信息例9-223根据题目要求,将系统的开发分为三个模块:登录模块:实现用户名和密码的输入,输入正确,则进入通讯录的具体操作模块;如果错误,则显示提示信息数据库操作模块:实现对数据库中表的创建、插入、修改、删除等操作图形用户界面模块:实现录入、编辑和查看界面及操作功能#eg9_2_login.pyfromtkinterimport*importeg9_2_2asmf
classReg(Frame):def__init__(self,master):frame=Frame(master)frame.pack()self.lab1=Label(frame,text="账户:")self.lab1.grid(row=0,column=0,pady=10,sticky=W)self.ent1=Entry(frame)self.ent1.grid(row=0,column=1,pady=10,sticky=W)self.lab2=Label(frame,text="密码:")self.lab2.grid(row=1,column=0)self.ent2=Entry(frame,show="*")self.ent2.grid(row=1,column=1,sticky=W)self.button=Button(frame,text="登录",command=self.submit)self.button.grid(row=2,column=1,padx=10,sticky=W)self.lab3=Label(frame,text="")self.lab3.grid(row=5,column=1,pady=10,sticky=W)self.button2=Button(frame,text="退出",command=master.destory)self.button2.grid(row=2,column=1,sticky=E)登录模块defsubmit(self):s1=self.ent1.get()s2=self.ent2.get()ifs1=='admin'ands2=='123':self.lab3["text"]="登陆成功"root.destroy()mf.main()elifs1.strip()==""ors2.strip()=="":self.lab3["text"]="用户名或密码不能为空"else:self.lab3["text"]="用户名或密码错误!"self.ent1.delete(0,len(s1))self.ent2.delete(0,len(s2))root=Tk()root.geometry('200x150')root.title("用户登录")app=Reg(root)root.mainloop()例9-224#db.pyimportsqlite3#创建表defcreate_table():conn=sqlite3.connect('test.db')cur=conn.cursor()try:#AUTOINCREMENT是编号id自动增加选项create_tb_cmd='''CREATETABLEIFNOTEXISTSstudent_info(idINTEGERPRIMARYKEYAUTOINCREMENT,nametext,phonetext,qqtext,notetext)'''cur.execute(create_tb_cmd)exceptExceptionase:print("Createtablefailed")returnFalsemit()cur.close()conn.close()#删除表defdrop_table():conn=sqlite3.connect('test.db')cur=conn.cursor()try:drop_cmd='''droptablestudent_info'''cur.execute(drop_cmd)except:print("droptablefailed")returnFalsemit()cur.close()conn.close()数据库操作模块#查询表defselect_data():conn=sqlite3.connect('test.db')cur=conn.cursor()select_cmd='''select*fromstudent_infoorderbyiddesc'''cur.execute(select_cmd)res=cur.fetchall()mit()cur.close()conn.close()returnres例9-225#编辑记录defedit_data(id):name_para={'id':id}conn=sqlite3.connect('test.db')cur=conn.cursor()select_cmd='''select*fromstudent_infowhereid=:id'''cur.execute(select_cmd,name_para)res=cur.fetchall()mit()cur.close()conn.close()returnres#插入记录definsert_data(name,phone,qq,note):name_para={'name':name,'phone':phone,'qq':qq,'note':note}conn=sqlite3.connect('test.db')cur=conn.cursor()insert_dt_cmd=‘’‘INSERTINTOstudent_info(name,phone,qq,note)VALUES(:name,:phone,:qq,:note)'''cur.execute(insert_dt_cmd,name_para)mit()cur.close()conn.close()数据库操作模块(续)#删除记录defdelete_data(sdt_id,name):name_para={'sdt_id':sdt_id,'name':name}conn=sqlite3.connect('test.db')cur=conn.cursor()del_cmd='''deletefromstudent_infowhereid=:sdt_idandname=:name'''cur.execute(del_cmd,name_para)mit()cur.close()conn.close()#更新记录defupdate_data(std_id,name,phone,qq,note):name_para={'name':name,'phone':phone,'qq':qq,'note':note,'std_id':std_id}print(name_para)conn=sqlite3.connect('test.db')cur=conn.cursor()update_cmd='''updatestudent_infosetname=:name,phone=:phone,qq=:qq,note=:notewhereid=:std_id'''print(update_cmd)cur.execute(update_cmd,name_para)mit()cur.close()conn.close()例9-226#eg9_2_2.pyfromtkinterimport*fromtkinterimportTk,Scrollbar,Frame,ttkimporttkinter#Treeview用表格形式来输出数据fromtkinter.ttkimportTreeviewfromtkinterimportmessageboximportdbassql
MENU_ITEMS=['常用','帮助']MENU_CY_ITEMS=['查看','录入','编辑','退出']MENU_HELP_ITEMS=['关于…','帮助']#记录查看defselect_action(root):frame=Frame(root)frame.place(x=0,y=10)#frame.grid(row=0,column=0)#滚动条scrollBar=tkinter.Scrollbar(frame)scrollBar.pack(side=tkinter.RIGHT,fill=tkinter.Y)scrollBar_sp=tkinter.Scrollbar(frame,orient='horizontal')#scrollBar_sp.pack(side=tkinter.RIGHT,fill=tkinter.X)#Treeview控件,5列,显示表头,带垂直滚动条tree=Treeview(frame,height=500,columns=('c1','c2','c3','c4','c5'),show="headings",yscrollcommand=scrollBar.set,xscrollcommand=scrollBar_sp.set)#设置每列宽度和对齐方式tree.column('c1',width=30,anchor='center')tree.column('c2',width=100,anchor='center')tree.column('c3',width=100,anchor='center')tree.column('c4',width=120,anchor='center')tree.column('c5',width=100,anchor='center')图形用户界面模块(1)#设置每列表头标题文本tree.heading('c1',text='序号')tree.heading('c2',text='姓名')tree.heading('c3',text='手机号')tree.heading('c4',text='QQ')tree.heading('c5',text='备注')tree.pack(side=tkinter.LEFT,fill=tkinter.Y)deftreeviewClick(event):#获取行的索引值iid=tree.identify_row(event.y)xy=tree.identify_element(event.x,event.y)s=tree.selection()tree.bind('<Button-1>',treeviewClick)#显示记录res=sql.select_data()std=[]foridt,name,phone,qq,noteinres:std.append((idt,name,phone,qq,note))foriinrange(len(res)):tree.insert("",i,values=(std[i][0],std[i][1],std[i][2],std[i][3],std[i][4]))例9-227#插入数据definsert_action():defsave_student():#name,phone,qq,noteuser_name=ent_name.get()phone=ent_phone.get()qq=ent_qq.get()beizhu=ent_nt.get()try:sql.create_table()sql.insert_data(user_name,phone,qq,beizhu)messagebox.showinfo("info","保存成功")except:print("写入数据失败")
defcancel_student():#取消,函数体为空,读者可以自己根据理解来实现pass#创建数据录入窗口ins_dat=Tk()ins_dat.geometry('260x200')ins_dat.grid()ins_dat.wm_title('数据录入')#'姓名','手机号','QQ','备注'lab_name=Label(ins_dat,text='姓名:')lab_phone=Label(ins_dat,text='手机号:')lab_qq=Label(ins_dat,text='QQ:')lab_nt=Label(ins_dat,text='备注:')ent_name=Entry(ins_dat)ent_phone=Entry(ins_dat)ent_qq=Entry(ins_dat)ent_nt=Entry(ins_dat)btn=Button(ins_dat,text='保存',command=save_student)btn2=Button(ins_dat,text='取消',command=cancel_student)图形用户界面模块(2)
lab_name.grid(row=0,column=0,sticky=W)lab_phone.grid(row=1,column=0,sticky=W)lab_qq.grid(row=2,column=0,sticky=W)lab_nt.grid(row=3,column=0,sticky=W)ent_name.grid(row=0,column=1,sticky=W)ent_phone.grid(row=1,column=1,sticky=W)ent_qq.grid(row=2,column=1,sticky=W)ent_nt.grid(row=3,column=1,sticky=W)btn.grid(row=4,column=1,sticky=W)btn2.grid(row=4,column=2,sticky=W)
ins_dat.mainloop()例9-228#编辑记录defedit_action():defedit_fd_info():std_id=ent_id.get()res=sql.edit_data(std_id)foridt,name,phone,qq,noteinres:ent_name_ed.insert(0,name)ent_phone_ed.insert(0,phone)ent_qq_ed.insert(0,qq)ent_nt_ed.insert(0,note)
defsave_info():std_id=ent_id.get()uname=ent_name_ed.get()uphone=ent_phone_ed.get()uqq=ent_qq_ed.get()ued=ent_nt_ed.get()if(unameanduphone):try:sql.update_data(std_id,uname,uphone,uqq,ued)messagebox.showinfo("info","保存成功")except:messagebox.showerror("info","保存失败")#pass图形用户界面模块(3)defdel_info():std_id=ent_id.get()uname=ent_name_ed.get()if(unameandstd_id):try:sql.delete_data(std_id,uname)messagebox.showinfo('infor','删除成功’)exceptExceptionase:messagebox.showerror('info',e)pass例9-229edit_dat=Tk()edit_dat.title("信息维护")edit_dat.geometry('300x200')lab_id=Label(edit_dat,text='请输入编辑ID:')ent_id=Entry(edit_dat)btn_fd=Button(edit_dat,text='查询',command=edit_fd_info)lab_id.grid(row=0,column=0,sticky=W)ent_id.grid(row=0,column=1,sticky=W)btn_fd.grid(row=0,column=2,sticky=W)
#vl_name=StringVar()lab_name=Label(edit_dat,text='姓名:')ent_name_ed=Entry(edit_dat,textvariable=edit_fd_info)lab_name.grid(row=2,column=0,sticky=W)ent_name_ed.grid(row=2,column=1,sticky=W)
#vl_phone=StringVar()lab_phone=Label(edit_dat,text='手机号:')ent_phone_ed=Entry(edit_dat,textvariable=edit_fd_info)lab_phone.grid(row=3,column=0,sticky=W)ent_phone_ed.grid(row=3,column=1,sticky=W)
lab_qq_ed=Label(edit_dat,text='QQ:')ent_qq_ed=Entry(edit_dat,textvariable=edit_fd_info)lab_qq_ed.grid(row=4,column=0,sticky=W)ent_qq_ed.grid(row=4,column=1,sticky=W)
lab_nt_ed=Label(edit_dat,text='备注:')ent_nt_ed=Entry(edit_dat,textvariable=edit_fd_info)lab_nt_ed.grid(row=12,column=0,sticky=W)ent_nt_ed.grid(row=12,column=1,sticky=W)btn_sv=Button(edit_dat,text='保存',command=save_info)btn_sv.grid(row=13,column=0)
图形用户界面模块(4)btn_del=Button(edit_dat,text='删除',command=del_info)btn_del.g
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医学26年:甲状腺癌术后随访管理 查房课件
- 食品企业精准把握5S实施要点
- 上海工程技术大学《ASP.NET程序设计》2025-2026学年第一学期期末试卷(B卷)
- 初中生2025年心理健康课程说课稿设计
- 脑瘫儿童骨骼肌肉系统护理
- 2026年数学片段说课稿
- 上饶卫生健康职业学院《安全科学与工程导论》2025-2026学年第一学期期末试卷(A卷)
- 上海音乐学院《安检设备原理与维修》2025-2026学年第一学期期末试卷(B卷)
- 上海音乐学院《安全原理与安全管理学》2025-2026学年第一学期期末试卷(A卷)
- 上海音乐学院《Android 应用开发》2025-2026学年第一学期期末试卷(A卷)
- 2026年高考政治后期备考策略分享交流课件
- 西南名校联盟2026届“3+3+3”高考备考诊断性联考(四)语文+答案
- 2026西师大版四年级下册小学数学国测练习卷含答案
- 2026年凉山州人才引进考试试题及答案
- 浙江杭州市城市建设投资集团有限公司2026届春季校园招聘备考题库(含答案详解)
- 2026年四川省成都市八年级地理生物会考考试真题及答案
- 2025版压力性损伤指南解读与临床实践
- 医院耗材管理委员会职责及工作制度
- 科技馆展品维护保养技师(中级)考试试卷及答案
- 2026年专业翻译资格证书考试中英翻译实战练习题
- 热电偶培训教学课件
评论
0/150
提交评论