Files
MusicPlayer/yjmpd-c#/yjdaemon/Database.py
T
2015-11-02 20:32:33 +01:00

82 lines
3.8 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import pymysql
import configparser
from threading import RLock as Lock
from warnings import filterwarnings
filterwarnings('ignore', category = pymysql.Warning)
class Database:
buffer = []
cout = 0
lock = Lock()
def __init__(self, DB_USERNAME, DB_PASSWORD, DB_HOST, DB_PORT, DB_DATABASE):
"""Init class """
self.cnx = pymysql.connect(user=DB_USERNAME, password=DB_PASSWORD, host=DB_HOST, database=DB_DATABASE, port=DB_PORT, charset='utf8')
self.cursor = self.cnx.cursor()
def executeQuery(self, query):
try:
self.cursor.execute(query)
self.cnx.commit()
return self.cursor.fetchall()
except pymysql.ProgrammingError as e:
print(e)
print(query)
@staticmethod
def executequerystatic(query):
config = configparser.ConfigParser()
try:
config.read("config.cfg")
DB_USERNAME = config.get("Database", "username")
DB_PASSWORD = config.get("Database", "password")
DB_HOST = config.get("Database", "host")
DB_DATABASE = config.get("Database", "database")
DB_PORT = config.getint("Database", "port")
except Exception as e:
print(e)
cnx = pymysql.connect(user=DB_USERNAME, password=DB_PASSWORD, host=DB_HOST, database=DB_DATABASE, port=DB_PORT)
cursor = cnx.cursor()
if query != "":
cursor.execute(query)
cnx.commit()
return cursor.fetchall()
else:
return []
def turnoffautocommit(self):
self.cursor.execute("SET autocommit=0;")
self.cnx.commit()
def removeSong(self, path):
self.db.executeQuery("DELETE FROM `tracks` WHERE trackUrl = " + path.replace("'", '\\\''))
def updateInsertSong(self, genre, trackname, artistname, albumname, albumartist, tracknumber, year, duration, path): #notworking
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') " +
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`)")
def insertMultipleSongs(self, genre, trackname, artistname, albumname, albumartist, tracknumber, year, duration, path):
self.buffer.append([genre, trackname, artistname, albumname, albumartist, tracknumber, year, duration, path])
# Database.lock.acquire()
if len(self.buffer) > 50:
self.pushbuffer()
# Database.lock.release()
def pushbuffer(self):
query = ('INSERT INTO `tracks` (`genre`, `trackUrl`, `trackName`, `artistName`, `albumName`, `albumArtist`, `trackNumber`, `year`, `duration`) VALUES ')
for song in self.buffer:
query += "("
for field in song:
query += "'" + field + "',"
query = query[:-1]
query += "),"
query = query[:-1]
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`);"
self.executeQuery(query)
del self.buffer[:]