On Mar 29, 6:41 pm, Gerhard Häring <[EMAIL PROTECTED]> wrote: > Ok, I'll review your code. > > aiwarrior wrote: > > class db: > > def __init__(self): #constructor > > conn = sqlite3.connect('./db.db') > > conn.isolation_level = None > > Autocommit mode is mostly for newbies who forget to call commit. > Unfortunately, newbiews find enough other ways to shoot themselves in > the foot. So, in retrospect, maybe I should not have added that feature > to pysqlite ;-) > > > self.cursor = conn.cursor() > > try: > > self.cursor.execute("CREATE TABLE database > > (album,filepath)" ) > > except: > > pass > > try: except: pass without catching *specific* exceptions is generally a > very bad idea. If you're doing something stupid, or another error > happens than the one you want to ignore, you will never know this way. > > > def add_entry( self, eone , etwo ): #Add entry to database > > self.cursor.execute( "INSERT INTO database (album,filepath) > > VALUES (?,?)", ( eone , etwo ) ) > > return 1 #TODO: exception handler > > > def get_mediadb( self, print_db = False ): > > self.cursor.execute( 'SELECT * FROM database' ) > > if (print_db == True): > > print self.cursor.fetchall() > > The if clause can be written as just "if print_db:". > > > def get_value( self, column ): > > self.cursor.execute( "SELECT %s FROM database" % column ) > > for n in self.cursor: > > print n > > > def destructor(self): > > self.cursor.close() > > Just FYI, Python's "destructor" method is called "__del__", not > "destructor". > > > > > def walking_and_filling(db): > > pass > > > if __name__ == "__main__": > > db = db() > > #walking_and_filling( db ) > > for root, dirs, files in os.walk( '''foo_path/''', > > topdown=False ): > > for name in files: > > joined = os.path.join(root, name) > > if (name[-3:] == 'mp3' and os.path.isfile( joined ) ): > > try: > > audio = MP3 (joined, ID3=EasyID3 ) > > print (audio['album']) > > db.add_entry( joined, audio['album'] ) > > except: > > pass > > Now, this try: except: pass is most probably hiding the real error That > leads to the insert failing. Because you just ignored any errors, you > will never now what exactly went wrong here. > > > db.get_mediadb( print_db=True ) > > > When i execute this the database doesn't get filled with anything and > > the program stays running in memory for ever. [...] > > HTH, > > -- Gerhard
I'm sorry about not saying showing the libraries. It was not on purpose. import os import sqlite3 from mutagen.easyid3 import EasyID3 from mutagen.mp3 import MP3 ##def tree(path): ## node = () ## for node in os.listdir( path ): ## if( os.path.isdir( path + node )): ## tree(path+node) ## return path class db: def __init__(self): #constructor conn = sqlite3.connect( './db.db' ) conn.isolation_level = None self.cursor = conn.cursor() try: self.cursor.execute( "CREATE TABLE database (album,filepath)" ) except: pass def add_entry( self, eone , etwo ): #Add entry to database self.cursor.execute( "INSERT INTO database (album,filepath) VALUES (?,?)", ( eone , etwo ) ) return 1 #TODO: exception handler def get_mediadb( self, print_db = False ): self.cursor.execute( 'SELECT * FROM database' ) if (print_db == True): print self.cursor.fetchall() def get_value( self, column ): self.cursor.execute( "SELECT %s FROM database" % column ) for n in self.cursor: print n def destructor( self ): self.cursor.close() def walking_and_filling( db ): pass if __name__ == "__main__": db = db() #walking_and_filling( db ) for root, dirs, files in os.walk( '''foo_path/''', topdown=False ): for name in files: joined = os.path.join(root, name) if (name[-3:] == 'mp3' and os.path.isfile( joined ) ): try: audio = MP3 (joined, ID3=EasyID3 ) print (audio['album']) db.add_entry( joined, audio['album'] ) except: pass db.get_mediadb( print_db=True ) This is all the code. Some of that try pass code is just something i glued to create a clean slate database file -- http://mail.python.org/mailman/listinfo/python-list