SCLP
This commit is contained in:
85
SCLP/utils/database.py
Normal file
85
SCLP/utils/database.py
Normal file
@@ -0,0 +1,85 @@
|
||||
# -*- 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()
|
||||
Reference in New Issue
Block a user