Database.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import pymysql
  4. import configparser
  5. from threading import RLock as Lock
  6. from warnings import filterwarnings
  7. filterwarnings('ignore', category = pymysql.Warning)
  8. class Database:
  9. buffer = []
  10. cout = 0
  11. lock = Lock()
  12. def __init__(self, DB_USERNAME, DB_PASSWORD, DB_HOST, DB_PORT, DB_DATABASE):
  13. """Init class """
  14. self.cnx = pymysql.connect(user=DB_USERNAME, password=DB_PASSWORD, host=DB_HOST, database=DB_DATABASE, port=DB_PORT, charset='utf8')
  15. self.cursor = self.cnx.cursor()
  16. def executeQuery(self, query):
  17. try:
  18. self.cursor.execute(query)
  19. self.cnx.commit()
  20. return self.cursor.fetchall()
  21. except pymysql.ProgrammingError as e:
  22. print(e)
  23. print(query)
  24. @staticmethod
  25. def executequerystatic(query):
  26. config = configparser.ConfigParser()
  27. try:
  28. config.read("config.cfg")
  29. DB_USERNAME = config.get("Database", "username")
  30. DB_PASSWORD = config.get("Database", "password")
  31. DB_HOST = config.get("Database", "host")
  32. DB_DATABASE = config.get("Database", "database")
  33. DB_PORT = config.getint("Database", "port")
  34. except Exception as e:
  35. print(e)
  36. cnx = pymysql.connect(user=DB_USERNAME, password=DB_PASSWORD, host=DB_HOST, database=DB_DATABASE, port=DB_PORT)
  37. cursor = cnx.cursor()
  38. if query != "":
  39. cursor.execute(query)
  40. cnx.commit()
  41. return cursor.fetchall()
  42. else:
  43. return []
  44. def turnoffautocommit(self):
  45. self.cursor.execute("SET autocommit=0;")
  46. self.cnx.commit()
  47. def removeSong(self, path):
  48. self.db.executeQuery("DELETE FROM `tracks` WHERE trackUrl = " + path.replace("'", '\\\''))
  49. def updateInsertSong(self, genre, trackname, artistname, albumname, albumartist, tracknumber, year, duration, path): #notworking
  50. self.db.executeQuery("INSERT INTO `tracks` (`genre`, `trackUrl`, `trackName`, `artistName`, `albumName`, `albumArtist`, `trackNumber`, `year`, `duration`) VALUES ('" + genre + b"','" + path.replace("'", '\\\'') + "','" + trackname + "','" + artistname + "','" + albumname + "','" + albumartist + "','" + tracknumber + "','" + year + "','0') " +
  51. b" ON DUPLICATE KEY UPDATE `genre`=VALUES(`genre`) , `trackName` = VALUES(`trackName`) , `artistName` = VALUES(`artistName`) ,`albumName` = VALUES(`albumName`) , `albumArtist` = VALUES(`albumArtist`) , `trackNumber` = VALUES(`trackNumber`) , `year` = VALUES(`year`) , `duration` = VALUES(`duration`)")
  52. def insertMultipleSongs(self, genre, trackname, artistname, albumname, albumartist, tracknumber, year, duration, path):
  53. self.buffer.append([genre, trackname, artistname, albumname, albumartist, tracknumber, year, duration, path])
  54. # Database.lock.acquire()
  55. if len(self.buffer) > 50:
  56. self.pushbuffer()
  57. # Database.lock.release()
  58. def pushbuffer(self):
  59. query = ('INSERT INTO `tracks` (`genre`, `trackUrl`, `trackName`, `artistName`, `albumName`, `albumArtist`, `trackNumber`, `year`, `duration`) VALUES ')
  60. for song in self.buffer:
  61. query += "("
  62. for field in song:
  63. query += "'" + field + "',"
  64. query = query[:-1]
  65. query += "),"
  66. query = query[:-1]
  67. query += " ON DUPLICATE KEY UPDATE `genre`=VALUES(`genre`) , `trackName` = VALUES(`trackName`) , `artistName` = VALUES(`artistName`) ,`albumName` = VALUES(`albumName`) , `albumArtist` = VALUES(`albumArtist`) , `trackNumber` = VALUES(`trackNumber`) , `year` = VALUES(`year`) , `duration` = VALUES(`duration`);"
  68. self.executeQuery(query)
  69. del self.buffer[:]