86 lines
2.5 KiB
Python
86 lines
2.5 KiB
Python
# -*- coding:utf-8 -*-
|
|
"""
|
|
@Author : xuxingchen
|
|
@Contact : xuxingchen@sinochem.com
|
|
@Desc : 数据库处理基础方法
|
|
"""
|
|
import sqlite3
|
|
|
|
from config import DB_PATH
|
|
from utils.logger import Logger, new_dc
|
|
|
|
|
|
class SQLiteDatabaseEngine:
|
|
def __init__(self, db_path: str = "demo.db") -> None:
|
|
self.sqlite3 = sqlite3
|
|
self.db_path = db_path
|
|
self.connection = None
|
|
self.cursor = None
|
|
self.connect()
|
|
|
|
def connect(self):
|
|
"""连接SQLite 数据库(如果数据库不存在则会自动创建)"""
|
|
self.connection = self.sqlite3.connect(self.db_path)
|
|
self.cursor = self.connection.cursor()
|
|
Logger.init(new_dc(f"🔗 SQLite - {self.db_path} has connect successfully! 🔗", "[1;32m"))
|
|
|
|
def disconnect(self):
|
|
try:
|
|
self.cursor.close()
|
|
self.connection.close()
|
|
except Exception as e:
|
|
if type(e).__name__ != "ProgrammingError":
|
|
Logger.error(f"{type(e).__name__}, {e}")
|
|
Logger.info(new_dc(f"🔌 Disconnect from SQLite - {self.db_path}! 🔌", "[1m"))
|
|
|
|
def exist(self, table_name):
|
|
self.cursor.execute(
|
|
f"SELECT name FROM sqlite_master WHERE type='table' AND name=?",
|
|
(table_name,),
|
|
)
|
|
result = self.cursor.fetchone()
|
|
if result:
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
|
|
class BaseTable:
|
|
def __init__(self, connection=None, cursor=None):
|
|
self.connection = connection
|
|
self.cursor = cursor
|
|
|
|
def set(self, connection, cursor):
|
|
self.connection = connection
|
|
self.cursor = cursor
|
|
|
|
def execute(self, sql: str | list, params: tuple | list = ()):
|
|
if isinstance(sql, list):
|
|
for i, s in enumerate(sql):
|
|
self.cursor.execute(s, params[i])
|
|
else:
|
|
self.cursor.execute(sql, params)
|
|
self.connection.commit()
|
|
|
|
def executemany(self, sql: str, params: list[tuple]):
|
|
self.cursor.executemany(sql, params)
|
|
self.connection.commit()
|
|
|
|
def query(self, sql: str, params: tuple = ()):
|
|
self.cursor.execute(sql, params)
|
|
|
|
|
|
class TableHandlerSingleton:
|
|
_instance = None
|
|
|
|
@classmethod
|
|
def get_instance(cls):
|
|
if cls._instance is None:
|
|
db = SQLiteDatabaseEngine(db_path=DB_PATH)
|
|
cls._instance = BaseTable(db.connection, db.cursor)
|
|
return cls._instance
|
|
|
|
|
|
def get_table_handler():
|
|
return TableHandlerSingleton.get_instance()
|