会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132358个问题
Python 全系列/第五阶段:数据库编程/mysql的使用 887楼

import pymysql

class dbUtil():
    def __init__(self):
        self.connect = pymysql.connect(host='localhost', user='root', passwd='root', db='playmusic', charset='utf8')
        self.cursor = self.connect.cursor()


    def close(self):
        if self.cursor:
            self.close()
        if self.connect:
            self.close()

    def exeDML(self, sql, *args):
        try:
            self.cursor.execute(sql, args)
            count = self.connect.commit()
            return count
        except Exception as e:
            print(e)
            if self.connect:
                self.connect.rollback()
        finally:
            self.close()

    def quryone(self, sql, *args):
        try:
            self.cursor.execute(sql, args)
            return self.cursor.fetchone()
        except Exception as e:
            print(e)
            if self.connect:
                self.connect.close()
        finally:
            self.close()

    def quryall(self, sql, *args):
        try:
            self.cursor.execute(sql, args)
            return self.cursor.fetchall()
        except Exception as e:
            print(e)
            if self.connect:
                self.connect.close()
        finally:
            self.close()

limage.png

老师以上代码会出现这个报错,我网上查了,说是超过最大递归深度,但是我写的另外一个一模一样的代码却可以正常运行,下面的这个代码是可以正常运行的。我检查了很多遍,实在找不出有什么区别

class dbUtil():
    def __init__(self):
        self.connect = pymysql.connect(host='localhost', user='root', passwd='root', db='playmusic', charset='utf8')
        self.cursor = self.connect.cursor()

    def close(self):
        if self.cursor:
            self.cursor.close()
        if self.connect:
            self.connect.close()

    def exeDML(self, sql, *args):
        try:
            self.cursor.execute(sql, args)
            count = self.connect.commit()
            return count
        except Exception as e:
            print(e)
            if self.connect:
                self.connect.rollback()
        finally:
            self.close()

    def quryone(self, sql, *args):
        try:
            self.cursor.execute(sql, args)
            # self.cursor.fetchone()
            return self.cursor.fetchone()
        except Exception as e:
            print(e)
            if self.connect:
                self.connect.close()
        finally:
            self.close()

    def quryall(self, sql, *args):
        try:
            self.cursor.execute(sql, args)
            return self.cursor.fetchall()
        except Exception as e:
            print(e)
            if self.connect:
                self.connect.close()
        finally:
            self.close()


Python 全系列/第五阶段:数据库编程/项目-音乐播放器-旧 888楼
Python 全系列/第五阶段:数据库编程/python操作mysql 889楼
Python 全系列/第五阶段:数据库编程/mysql的使用 890楼
Python 全系列/第五阶段:数据库编程/mysql的使用 893楼
Python 全系列/第五阶段:数据库编程/mysql介绍与环境安装 894楼
Python 全系列/第五阶段:数据库编程/python操作mysql(旧) 895楼
Python 全系列/第五阶段:数据库编程/项目-音乐播放器 898楼

MyService.py

from dbUtil import Mydb
class MyService:
    def __init__(self):
        self.user = None
    def login(self,uname,password):
        sql = "select * from t_user where uname=%s and password=%s"
        user = Mydb().query_one(sql,uname,password)
        if user:
            self.user = user
            return True
        else:
            return False

    def add_music(self,files):
        for f in files:
            start = f.rfind('/')+1
            end = f.rfind('.mp3')
            music_name = f[start:end]
            #根据歌名查询数据是否有该首歌
            sql = "select * from t_music where music_name=%s"
            music =Mydb().query_one(sql,music_name)
            if music:
                #查询关联表t_list该用户是否添加了这首歌
                sql = "select * from t_list where uid=%s and uid=%s"
                t_list=Mydb().query_one(sql,music[0],self.user[0])
                if not t_list:
                    sql = "insert into t_list(mid,uid) values(%s,%s)"
                    Mydb().exeDML(sql,music[0],self.user[0])

            else:
                #将音乐保存到t_music
                sql = "insert into t_music(music_name,path) values(%s,%s)"
                mid = Mydb().exeDML(sql,music_name,f)

                #用户选择的音乐保存到t_list
                sql = "insert into t_list(mid,uid) values(%s,%s)"
                Mydb().exeDML(sql,mid,self.user[0])

    #查询用户的音乐列表
    def findListByUser(self):
        sql = "select m.music_name from t_music m,t_list t where m.id and t.uid=%s"
        return Mydb().query_all(sql,self.user[0])
        
        
        
        
    
    
        
        
play.py       
        
        
from MyService import MyService
import tkinter
from tkinter.filedialog import askopenfilenames
class PlayWindow:
    def __init__(self,myService):
        self.myService = myService
        self.listbox = None
    #导入音乐
    def impMusic(self,even):
        print('导入音乐')
        #打开磁盘选择音乐
        files = askopenfilenames(filetypes=(['mp3','*.mp3'],))
        #导入音乐,将选择的音乐保存到数据库
        self.myService.add_music(files)
        self.flush_list()

    #查询当前用户的音乐列表
    def flush_list(self):
        #清空列表
        self.listbox.delete(0,tkinter.END)
        #查询该用户的索引音乐列表
        music_list = self.myService.findListByUser()
        if music_list:
            for m in music_list:
                self.listbox.insert(tkinter.END,m)

    #播放音乐
    def playMusic(self,even):
        print('播放音乐')

    #删除音乐
    def deleteMusic(self,even):
        print('删除音乐')

    def showWindow(self):
        #显示窗口
        top = tkinter.Tk()
        play_button = tkinter.Button(top,text='播放')
        imp_button = tkinter.Button(top,text='导入音乐')
        delete_button = tkinter.Button(top,text='删除')
        play_button.grid(row=0,column=0,padx=5,pady=5)
        imp_button.grid(row=0,column=2,padx=5,pady=5)
        delete_button.grid(row=0,column=4,padx=5,pady=5)

        #添加列表
        self.listbox = tkinter.Listbox(top)
        self.listbox.grid(row=1,column=0,padx=5,pady=5,columnspan=9)

        #添加音乐列表
        self.flush_list()

        #给按钮添加事件
        imp_button.bind("<ButtonRelease-1>",self.impMusic)
        play_button.bind("<ButtonRelease-1>",self.playMusic)
        delete_button.bind("<ButtonRelease-1>",self.deleteMusic)
        top.mainloop()
       
if __name__ == "__main__":
    uname = input('请输入用户名:')
    password = input('请输入密码:')
    myservice = MyService()
    if myservice.login(uname,password):
        print('登录成功')
        playWindow = PlayWindow(myservice)
        playWindow.showWindow()
    else:
        print('登录失败')



image.png

image.png


image.png

image.png


老师,为什么我这导入音乐,数据库里的t_list中mid是空的,而且列表中每导入一首歌,会显示多次歌曲名字







Python 全系列/第五阶段:数据库编程/项目-音乐播放器-旧 899楼
Python 全系列/第五阶段:数据库编程/mysql介绍与环境安装 900楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637