59 lines
1.5 KiB
Python
59 lines
1.5 KiB
Python
import sqlite3
|
|
import logging
|
|
from configparser import ConfigParser
|
|
from pathlib import Path
|
|
from appdirs import user_config_dir
|
|
|
|
|
|
class DBAccess:
|
|
def __init__(self, db_name=None):
|
|
logging.info("Instantiating DBAccess")
|
|
config = ConfigParser()
|
|
cfg_file = (
|
|
Path(user_config_dir(appname="musicpom", appauthor="billypom"))
|
|
/ "config.ini"
|
|
)
|
|
config.read(cfg_file)
|
|
if db_name is None:
|
|
db_name = config.get("settings", "db")
|
|
self._conn: sqlite3.Connection = sqlite3.connect(db_name)
|
|
self._cursor: sqlite3.Cursor = self._conn.cursor()
|
|
|
|
def __enter__(self):
|
|
return self
|
|
|
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
self.close()
|
|
|
|
@property
|
|
def connection(self):
|
|
return self._conn
|
|
|
|
@property
|
|
def cursor(self):
|
|
return self._cursor
|
|
|
|
def commit(self):
|
|
self.connection.commit()
|
|
|
|
def close(self, commit=True):
|
|
if commit:
|
|
self.commit()
|
|
self.connection.close()
|
|
|
|
def execute(self, sql, params):
|
|
self.cursor.execute(sql, params or ())
|
|
|
|
def executemany(self, sql, seq_of_params):
|
|
self.cursor.executemany(sql, seq_of_params) # sqlite has execute many i guess?
|
|
|
|
def fetchall(self):
|
|
return self.cursor.fetchall()
|
|
|
|
def fetchone(self):
|
|
return self.cursor.fetchone()
|
|
|
|
def query(self, sql, params):
|
|
self.cursor.execute(sql, params or ())
|
|
return self.fetchall()
|