Python商城管理系统,连接SQLite3数据库,界面切换有商品条形图

本文主要是介绍Python商城管理系统,连接SQLite3数据库,界面切换有商品条形图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

截图一:

功能:登录之前只有查看统计信息------商品库存管理条形图。

截图二:

功能:

登陆成功后,显示用户登录信息,比如用户昵称,欢迎提示语!

功能按钮都可用。【无操作,依旧显示条形图界面】

截图三:

功能:注册功能,重置测试可以,输入框全部清空

截图四:

功能:选中删除,和选中编辑信息,可以多选删除信息,编辑信息只能选择一个。

截图五:

功能:个人信息功能,可以修改信息(昵称,密码),不可修改账号

代码部分:

(本来是按照MVC三层写的,结果写着写着视图层和逻辑层就写到一起了!写到一半想改过来时,感觉写完再改也很简单,结果发现,改过来同样耗时耗力气,索性就这样吧。本来对三层架构不太清晰,越写越清晰,边写边看别人的代码,看被人主要看别人的逻辑思路,这个程序纯按照自己的思路写的,功能简单,简单的把模糊查询都省略了,其实写到最后越写越多,想写的实在是太多了,期末了,时间不允许,就这样吧!总结一下:写的时候方向就要写对,比如MVC严格按照这个路子写,不能偏,不然工作量很大。写完这个程序,感觉算是入门了吧!哈哈哈,边学边写,用了几个星期。刚开始面向对象都看不懂,很多代码觉得太难了,到最后,越写感觉越简单,写的越快!)

注意:变量名命不规范。这个以后也要注意!

view.py  这部分把逻辑和视图写一起了:

from tkinter import * 
from tkinter import ttk
from sqliteCon import sql
from tkinter import messagebox
from showCanvas import ShowDraw
class View:def __init__(self):# 加载数据库对象self.sql=sql()# self.mod=Mod()self.showDraw=ShowDraw()# 显示主窗口self.windows()# 显示登录模块self.winUser()# 显示中间功能按钮模块self.winFunc()# 显示每个功能的窗口self.winMain()# 欢迎标签的动态数值绑定self.e1=StringVar()self.e2=StringVar()self.e3=StringVar()self.e4=StringVar()self.e5=StringVar()self.ee1=StringVar()self.ee2=StringVar()# 根据这个数字控制窗口的出现。销毁框架用self.showElemNum=0#登陆标记 默认未登录为false  登录为true# self.flag=Trueself.flag=False# 显示条形图# 显示条形图self.winCanvas()# self.showLuoji()def windows(self):# 视图 主窗口self.window = Tk()                     # 窗口实例化self.window.title('商城管理系统')      #设置窗口名字self.window.geometry('800x600+500+300')  #设置窗口大小 宽*高,并设置窗口位置self.window.resizable(0,0)  #窗口大小不可更改def winUser(self):# 用户登录视图# 在框架里设置lable时,框架自身失去背景色,高为标签的高。# 框架里有内容,不用设置高,宽,自动撑起来self.frame_user=Frame(bg="#c7c7c7")# 账户密码框架# 账户密码框架置顶靠左显示  self.label_user=Label(self.frame_user,text="账号:",bg="#c7c7c7")self.entry_user=Entry(self.frame_user)self.label_pwd=Label(self.frame_user,text="密码:",bg="#c7c7c7")self.entry_pwd=Entry(self.frame_user,show='*')# 登录、注册按钮self.btn_login=Button(self.frame_user,text="登录",command=self.login)self.btn_logout=Button(self.frame_user,text="退出",command=self.logout)self.btn_register=Button(self.frame_user,text="注册",command=self.regiter)# 欢迎用户self.LWNText=StringVar()self.LWText=StringVar()self.label_wel_name=Label(self.frame_user,textvariable=self.LWNText,pady=15,bg="#c7c7c7")self.label_wel=Label(self.frame_user,textvariable=self.LWText,pady=15,bg="#c7c7c7")# 放置组件self.frame_user.pack(side=TOP,fill=X)self.label_user.pack(side=LEFT,padx=15,pady=15)self.entry_user.pack(side=LEFT)self.label_pwd.pack(side=LEFT,padx=15,pady=15)self.entry_pwd.pack(side=LEFT)self.btn_login.pack(side=LEFT,padx=24)self.btn_logout.pack(side=LEFT)self.btn_register.pack(side=LEFT,padx=24)self.label_wel_name.pack(side=RIGHT)self.label_wel.pack(side=RIGHT)def winFunc(self):# 主共能 中间菜单按钮self.frame_func=Frame()self.btn_query=Button(self.frame_func,text="查询商品",command=self.winQuery)self.btn_add=Button(self.frame_func,text="添加商品",command=self.winAdd)self.btn_showCanvas=Button(self.frame_func,text="数据统计",command=self.winCanvas)self.btn_personalInfo=Button(self.frame_func,text="个人信息",command=self.winPersnInfo)  # 放置组件self.frame_func.pack()self.btn_query.pack(side=LEFT,pady=8,padx=32)self.btn_add.pack(side=LEFT,pady=8,padx=32)self.btn_showCanvas.pack(side=LEFT,pady=8,padx=32)self.btn_personalInfo.pack(side=LEFT,pady=8,padx=32)def winMain(self):# 显示内容frameself.frame_main=Frame(height=500,width=800,bg="#c7c7c7")# 放置组件self.frame_main.pack()def winCanvas(self):self.showLuoji()self.showElemNum=5self.frame_canvas=Frame(self.frame_main)self.frame_canvas.pack()self.showDraw.draw_bar(self.frame_canvas)def winPersnInfo(self):#个人信息管理 # 判断之前是否有窗口,有则销毁self.showLuoji()self.showElemNum=4self.infoLabel=Frame(self.frame_main)self.infoLabel.grid(padx=270,pady=80,ipadx=30,ipady=30)self.infoLabelName=Label(self.infoLabel,text="昵  称:")self.infoLabelName.grid(row=2,column=1,pady=20,sticky=E)self.infoEntryName=Entry(self.infoLabel,textvariable=self.ee1)self.infoEntryName.grid(row=2,column=2)self.infoLabelUser=Label(self.infoLabel,text="账  号:")self.infoLabelUser.grid(row=4,column=1,pady=20,sticky=E)self.infoEntryUser=Entry(self.infoLabel,textvariable=self.ee2)self.infoEntryUser.grid(row=4,column=2)self.infoLabelPwd=Label(self.infoLabel,text=" 原密码:")self.infoLabelPwd.grid(row=5,column=1,pady=20,sticky=E)self.infoEntryPwd=Entry(self.infoLabel,show="*")self.infoEntryPwd.grid(row=5,column=2)self.infoLabelPwd2=Label(self.infoLabel,text=" 新密码:")self.infoLabelPwd2.grid(row=8,column=1,pady=20,sticky=E)self.infoEntryPwd2=Entry(self.infoLabel)self.infoEntryPwd2.grid(row=8,column=2,sticky=W)self.infoSaveBtn=Button(self.infoLabel,text="更改",command=self.infoSave)self.infoSaveBtn.grid(row=10,column=1,columnspan=2,sticky=W,padx=50)self.infoczBtn=Button(self.infoLabel,text="重置",command=self.infoCZ)self.infoczBtn.grid(row=10,column=2,sticky=E,padx=30)self.infoShow()def infoCZ(self):self.infoEntryName.delete(0,END)self.infoEntryPwd.delete(0,END)self.infoEntryPwd2.delete(0,END)def infoShow(self):# 获取当前用户的账号,并填入文本输入框# usering是列表类型,存的是当前登录的用户信息users=self.sql.selectUser()for user in users:if user[1]==self.usering[1]:# 设置昵称self.ee1.set(user[3])# 设置账号self.ee2.set(user[1])# 设置账号输入框不可点击self.infoEntryUser.config(state=DISABLED)def infoSave(self):# 获取输入框的数据user_num=self.infoEntryUser.get()user_pwd1=self.infoEntryPwd2.get()user_pwd0=self.infoEntryPwd.get()user_name=self.infoEntryName.get()if user_num and user_pwd1 and user_pwd0 and user_name:if user_pwd0==self.usering[2]:if self.sql.updateUser(user_pwd=user_pwd1,user_name=user_name,user_num=user_num):messagebox.showinfo(message='已更改!请重新登录!')# 密码更改后直接退出当前用户self.logout()else:messagebox.showerror(message='更改失败!')else:messagebox.showerror(message='输入框不能为空!')def winQuery(self):# 信息查询self.showLuoji()self.showElemNum=2self.frameQuery=Frame(self.frame_main,bg="#c7c7c7")self.labTitle=Label(self.frameQuery,text='商品信息',bg="#c7c7c7")columns=('prod_id','prod_name','prod_price','prod_detail','prod_stock')self.dataListFrame=Frame(self.frameQuery)# show='headings' 隐藏首列self.dataList=ttk.Treeview(self.dataListFrame,height=15,show='headings',columns=columns)#滚动条  方向垂直  yview函数系统自带self.listVScroll=Scrollbar(self.dataListFrame,orient='vertical',command=self.dataList.yview)# 放在右边,进行Y轴填充self.listVScroll.pack(side=RIGHT,fill=Y)# 给treeview添加配置,将Scrollbar与 每行数据绑定。self.dataList.configure(yscrollcommand=self.listVScroll.set)self.dataList.column('prod_id',width=100,anchor='center')self.dataList.column('prod_name',width=100,anchor='center')self.dataList.column('prod_price',width=100,anchor='center')self.dataList.column('prod_detail',width=150,anchor='center')self.dataList.column('prod_stock',width=80,anchor='center')self.dataList.heading('prod_id',text='商品编号')self.dataList.heading('prod_name',text='商品名称')self.dataList.heading('prod_price',text='商品价格')self.dataList.heading('prod_detail',text='商品描述')self.dataList.heading('prod_stock',text='商品数量')self.frameQuery.pack(padx=130,pady=10)self.labTitle.pack()self.dataListFrame.pack()self.dataList.pack()self.delBtn=Button(self.frameQuery,text='删除所选信息',command=self.deleteBtn)self.delBtn.pack(pady=12,padx=120,side=LEFT)self.editBtn=Button(self.frameQuery,text='编辑所选信息',command=self.editSelectBtn)self.editBtn.pack(pady=12,side=LEFT)self.printItem()def printItem(self):# 逻辑代码  获取并显示数据库所有商品信息itemsData=self.sql.selectProd()i=0for item in itemsData:# 向treeview里插入所有数据self.dataList.insert('',i,values=item)i=i+1def deleteBtn(self):# 删除选中的数据# self.dataList.selection()获取选中的数据可以是单条记录,也可以是多条for item in self.dataList.selection():itemText=self.dataList.item(item,"values") # print(itemText[0])# 从数据库中删除选中的项self.sql.deleteProd(itemText[0])# 清空treeviewself.delTreeItems()# 重新显示数据库商品信息self.printItem()def delTreeItems(self):#清空treeview里的所有信息 # get_children()得到 treeview里得每一条数据,并删除x=self.dataList.get_children()for item in x:self.dataList.delete(item)  def winAdd(self):self.showLuoji()self.showElemNum=3self.frameAdd=Frame(self.frame_main,bg="#c7c7c7") self.labelProdId=Label(self.frameAdd,text='商品编号:',bg="#c7c7c7") self.entryProdId=Entry(self.frameAdd,textvariable=self.e1)self.labelProdName=Label(self.frameAdd,text='商品名称:',bg="#c7c7c7") self.entryProdName=Entry(self.frameAdd,textvariable=self.e2)self.labelProdPrice=Label(self.frameAdd,text='商品价格:',bg="#c7c7c7") self.entryProdPrice=Entry(self.frameAdd,textvariable=self.e3)self.labelProdDetail=Label(self.frameAdd,text='商品描述:',bg="#c7c7c7") self.entryProdDetail=Entry(self.frameAdd,textvariable=self.e4)self.labelProdStock=Label(self.frameAdd,text='商品数量:',bg="#c7c7c7") self.entryProdStock=Entry(self.frameAdd,textvariable=self.e5)self.addBtn=Button(self.frameAdd,text='添加',command=self.add)self.delBtn=Button(self.frameAdd,text='修改',command=self.update2)self.frameAdd.grid(ipady=60,padx=300,pady=100)self.labelProdId.grid(row=0,column=1,pady=20)self.entryProdId.grid(row=0,column=2)self.labelProdName.grid(row=1,column=1)self.entryProdName.grid(row=1,column=2)self.labelProdPrice.grid(row=2,column=1,pady=20)self.entryProdPrice.grid(row=2,column=2)self.labelProdDetail.grid(row=3,column=1)self.entryProdDetail.grid(row=3,column=2)self.labelProdStock.grid(row=4,column=1,pady=20)self.entryProdStock.grid(row=4,column=2)self.addBtn.grid(row=5,column=1,columnspan=2,sticky=W,padx=50)self.delBtn.grid(row=5,column=2,sticky=E,padx=30)def editSelectBtn(self):# 编辑模块for item in self.dataList.selection():itemText=self.dataList.item(item,"values") # print(itemText[0])# 从数据库中删除选中的项self.e1.set(itemText[0])self.e2.set(itemText[1])self.e3.set(itemText[2])self.e4.set(itemText[3])self.e5.set(itemText[4])self.frameQuery.destroy()self.winAdd()self.entryProdId.config(state=DISABLED)def update2(self):  # 这是添加商品中的修改按钮prod_id=self.entryProdId.get()prod_name=self.entryProdName.get()prod_price=self.entryProdPrice.get()prod_detail=self.entryProdDetail.get()prod_stock=self.entryProdStock.get()if prod_id!='' and prod_name!='' and prod_price!='' and prod_detail!='' and prod_stock!='':if self.sql.updateProd(prod_name=prod_name,prod_price=prod_price,prod_detail=prod_detail,prod_stock=prod_stock,prod_id=prod_id):messagebox.showinfo(message='修改成功!')else:messagebox.showerror(message='修改失败!')# 商品编号输入框变为正常(可更改)self.entryProdId.config(state=NORMAL)  # 清空文本输入框内容self.entryProdId.delete(0,len(prod_id))self.entryProdName.delete(0,len(prod_name))self.entryProdPrice.delete(0,len(prod_price))self.entryProdDetail.delete(0,len(prod_detail))self.entryProdStock.delete(0,len(prod_stock)) else:messagebox.showerror(message='输入框不能为空!')# 添加商品信息def add(self):prod_id=self.entryProdId.get()prod_name=self.entryProdName.get()prod_price=self.entryProdPrice.get()prod_detail=self.entryProdDetail.get()prod_stock=self.entryProdStock.get()# 判断是否输入数据if prod_id!='' and prod_name!='' and prod_price!='' and prod_detail!='' and prod_stock!='':if self.sql.insertProd(prod_id=prod_id,prod_name=prod_name,prod_price=prod_price,prod_detail=prod_detail,prod_stock=prod_stock):messagebox.showinfo(message='添加成功!')else:messagebox.showerror(message='添加失败!')self.entryProdId.delete(0,len(prod_id))self.entryProdName.delete(0,len(prod_name))self.entryProdPrice.delete(0,len(prod_price))self.entryProdDetail.delete(0,len(prod_detail))self.entryProdStock.delete(0,len(prod_stock)) else:messagebox.showerror(message='输入框不能为空!')def login(self):# 登录功能users=self.sql.selectUser()user=self.entry_user.get()pwd=self.entry_pwd.get()if len(users) > 0:for row in users:if user==row[1] and pwd==row[2]:self.LWNText.set(row[3])self.LWText.set('欢迎你!')# 显示条形图self.winCanvas()# 保存当前用户名self.usering=row# print(row[1])self.flag=True# 文本输入框不可更改self.entry_user.config(state=DISABLED)self.entry_pwd.config(state=DISABLED)self.showLuoji()messagebox.showinfo(message='登陆成功!')breakif not self.flag:messagebox.showerror(message='账户或密码错误!')else:messagebox.showwarning(message='无法登录!')# 显示条形图self.winCanvas()  def logout(self):# 退出功能self.flag=Falseself.showLuoji()self.LWNText.set('')self.LWText.set('你还未登录!')# 设置可编辑self.entry_user.config(state=NORMAL)self.entry_pwd.config(state=NORMAL)# 清空文本框内容self.entry_user.delete(0,END)self.entry_pwd.delete(0,END)# 显示条形图self.winCanvas()def regiter(self):# 注册功能self.showLuoji()self.showElemNum=1# 注册按钮点一下是我们想要的效果,第二下直接覆盖界面,无法解决self.regLebel=LabelFrame(self.frame_main)self.regLebel.pack(pady=69,padx=238,ipadx=40,ipady=38)self.regLabelUser=Label(self.regLebel,text="昵  称:")self.regLabelUser.grid(row=2,column=0,pady=20,sticky=E)self.regEntryUser=Entry(self.regLebel)self.regEntryUser.grid(row=2,column=1,columnspan=2,pady=20,sticky=W)self.regLabelName=Label(self.regLebel,text="账  号:")self.regLabelName.grid(row=4,column=0,pady=20,sticky=E)self.regEntryName=Entry(self.regLebel)self.regEntryName.grid(row=4,column=1,pady=20,columnspan=2,sticky=W)self.regLabelPwd=Label(self.regLebel,text="密    码:")self.regLabelPwd.grid(row=5,column=0,pady=20,sticky=E)self.regEntryPwd=Entry(self.regLebel,show="*")self.regEntryPwd.grid(row=5,column=1,pady=20,columnspan=2,sticky=W)self.regLabelPwd2=Label(self.regLebel,text="确认密码:")self.regLabelPwd2.grid(row=8,column=0,pady=20,sticky=E)self.regEntryPwd2=Entry(self.regLebel,show="*")self.regEntryPwd2.grid(row=8,column=1,columnspan=2,pady=20,sticky=W)
# 
# 始终对不齐,这个标签是多余的,删除注册界面会对不齐,问题可能是Labelframe得问题,另一个地方用的frame,用同样的方法对齐了Label(self.regLebel,text="       ").grid(row=10,column=0,padx=40)
# self.czBtn=Button(self.regLebel,text="重置",command=self.regCZBtn)self.czBtn.grid(row=10,column=1,sticky=W)self.regitBtn=Button(self.regLebel,text="注册",command=self.regBtn)self.regitBtn.grid(row=10,column=2,sticky=W)def regCZBtn(self):# 重置功能self.regEntryUser.delete(0,END)self.regEntryName.delete(0,END)self.regEntryPwd.delete(0,END)self.regEntryPwd2.delete(0,END)def regBtn(self):# 获取输入值username=self.regEntryUser.get()usernum=self.regEntryName.get()userpwd=self.regEntryPwd.get()userpwd2=self.regEntryPwd2.get()# 判断输入内容if username!=""and usernum!="" and userpwd!="" and userpwd2!="":if userpwd==userpwd2:if self.sql.register(usernum=usernum,userpwd=userpwd,username=username):messagebox.showinfo(message="注册成功!")else:messagebox.showerror(message="注册失败!")else:messagebox.showerror(message="密码输入不一致!")else:messagebox.showinfo(message="请填入完整信息!")        def showLuoji(self):if not self.flag:self.btn_query.config(state=DISABLED)self.btn_add.config(state=DISABLED)self.btn_personalInfo.config(state=DISABLED)self.btn_logout.config(state=DISABLED)else:self.btn_add.config(state=NORMAL)self.btn_query.config(state=NORMAL)self.btn_personalInfo.config(state=NORMAL)self.btn_logout.config(state=NORMAL)if self.showElemNum==1:self.regLebel.destroy()elif self.showElemNum==2:self.frameQuery.destroy()elif self.showElemNum==3:self.frameAdd.destroy()elif self.showElemNum==4:self.infoLabel.destroy()elif self.showElemNum==5:self.frame_canvas.destroy()  if not self.flag:  self.LWNText.set('')self.LWText.set('请登录账户!')  # __name__:模块的名字
# 当脚本运行时内置变量__name__的值为__main__
# 课本p216页  模块的主要属性
if __name__ == "__main__":view=View()view.window.mainloop()# 进入消息循环

showCanvas.py  画条形图


import tkinter as tk
import matplotlib
import matplotlib.pyplot as plt
# 创建画布需要的库
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
# 导入画图常用的库
from matplotlib.figure import Figure
from sqliteCon import sql
class ShowDraw:def __init__(self):self.sql=sql()# self.main()def draw_bar(self,frame):# 存放商品数量self.itemLabels = []# 存放商品名self.itemXTexts=[]items=self.sql.selectProd()for item in items:if item[4]<=70:self.itemLabels.append(item[4])self.itemXTexts.append(item[1])# --------------------------------# 创建图像   画布大小 单位英寸  分辨率100f=plt.figure(figsize=(8,4),dpi=100)canvas=FigureCanvasTkAgg(f,master=frame)canvas.get_tk_widget().grid()# 直接输出整块画布,不分成小块  1*1  1a=f.add_subplot(111)# 解决汉字乱码问题plt.rcParams['font.sans-serif'] = ['SimHei']# 使用指定的汉字字体类型(此处为黑体)a.clear()# 绘条形图plt.bar(range(len(self.itemLabels)),self.itemLabels,align='center',color='blue')plt.title('商品库存条形图')# 设置x轴坐标plt.xticks(range(len(self.itemXTexts)),self.itemXTexts)# y轴的值plt.ylim([0,200])# 为每个条形图添加数值标签for x,y in enumerate(self.itemLabels):plt.text(x,y+20,'%s'%round(y,1),ha='center')canvas.draw()if __name__=="__main__":s=ShowDraw()

sqliteCon.py   数据库连接

import sqlite3class sql:def __init__(self):# 连接数据库self.conn=sqlite3.connect('test.db')#创建游标self.cursor=self.conn.cursor()# 按账号修改用户用到的SQL语句self.SQLUpdateUser="update user set user_pwd=?,user_name=? where user_num=?"    # 注册  插入SQL语句# self.SQLregister="insert into user(user_num,user_pwd,user_name) values(?,?,?);"self.SQLInsertUser="insert into user(user_num,user_pwd,user_name)values(?,?,?)"# 查询用户self.SQLSelectUser="select * from user"# 查询商品信息self.SQLSelectProd="select * from product"#插入产品信息   \是连接作用self.SQLInsertProd="insert into product(prod_id,prod_name,prod_price,prod_detail,prod_stock)\values(?,?,?,?,?)"# 修改商品信息  更新self.SQLUpdateProd="update product set prod_name=?,prod_price=?,\prod_detail=?,prod_stock=? where prod_id=?"   # 按 商品编号 删除 商品 self.SQLDelectProd="delete from product where prod_id=?"# 模糊查询  # self.SQLSearch="select * from product where prod_id like ? or prod_name like ? or prod_price like ? or prod_detail like ? or prod_stock like ?"def __del__(self):# 释放对象,执行方法# 关闭游标self.cursor.close() #关闭连接self.conn.close()def register(self,**userss):# 注册用户try:# print(userss)# 可变参数:p109# **表示放在字典里的参数,*元组# param 是列表,userss['usernum']获取字典里的值,并放入列表  用于下一句的参数param=[userss['usernum'],userss['userpwd'],userss['username']]self.cursor.execute(self.SQLInsertUser,param)# 没有提交方法,数据不更改!self.conn.commit()return Trueexcept sqlite3.Error:return False  def updateUser(self,**kwargs):# 修改更新用户信息try:param=[kwargs['user_pwd'],kwargs['user_name'],kwargs['user_num']]  self.cursor.execute(self.SQLUpdateUser,param)self.conn.commit()return Trueexcept sqlite3.Error:return Falsedef selectUser(self):# 查询用户self.cursor.execute(self.SQLSelectUser)# 返回一个二维数组,记录所有符合条件的记录,若无数据返回noneresult=self.cursor.fetchall()return resultdef selectProd(self):# 查询商品信息self.cursor.execute(self.SQLSelectProd)result=self.cursor.fetchall()return resultdef insertProd(self,**kwargs):# 添加商品try:param=[kwargs['prod_id'],kwargs['prod_name'],kwargs['prod_price'],kwargs['prod_detail'],kwargs['prod_stock']]  self.cursor.execute(self.SQLInsertProd,param)self.conn.commit()return Trueexcept sqlite3.Error:return Falsedef deleteProd(self,prod_id):# 按商品编号删除信息try:self.cursor.execute(self.SQLDelectProd,[prod_id])self.conn.commit()# 记录有效行数effectRow=self.cursor.rowcountif effectRow>0:return Trueelse:return Falseexcept sqlite3.Error:return False   def updateProd(self,**kwargs):#  按商品编号更新信息try:param=[kwargs['prod_name'],kwargs['prod_price'],kwargs['prod_detail'],kwargs['prod_stock'],kwargs['prod_id']]  self.cursor.execute(self.SQLUpdateProd,param)self.conn.commit()return Trueexcept sqlite3.Error:return False# 模糊查询# def searchProd(self, key):#       try:#         # 列表生成器#           param = ['%' + str(key) + '%' for i in range(5)]#           self.cursor.execute(self.SQLSearch, param)#           result = self.cursor.fetchall()#           return result#       except sqlite3.Error:#           return None

 

 

 

这篇关于Python商城管理系统,连接SQLite3数据库,界面切换有商品条形图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/824363

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧