import abc from typing import List, Dict, Tuple, Union, Optional import logging.handlers import logging from configure import conf import os class DBException(Exception): ... class DBDoneException(DBException): ... class DBCloseException(DBException): ... class DBBit: BIT_0 = b'\x00' BIT_1 = b'\x01' class Database(metaclass=abc.ABCMeta): @abc.abstractmethod def __init__(self, host: str, name: str, passwd: str, port: str): self._host = str(host) self._name = str(name) self._passwd = str(passwd) if port is None: self._port = 3306 else: self._port = int(port) self.logger = logging.getLogger("main.database") self.logger.setLevel(conf["LOG_LEVEL"]) if len(conf["LOG_HOME"]) > 0: handle = logging.handlers.TimedRotatingFileHandler( os.path.join(conf["LOG_HOME"], f"mysql-{name}@{host}.log"), backupCount=10) handle.setFormatter(logging.Formatter(conf["LOG_FORMAT"])) self.logger.addHandler(handle) @abc.abstractmethod def close(self): """ 关闭数据库, 此代码执行后任何成员函数再被调用其行为是未定义的 :return: """ ... @abc.abstractmethod def is_connect(self) -> bool: """ :return: 是否处于连接状态 """ ... @abc.abstractmethod def get_cursor(self) -> any: """ :return: 返回数据库游标 """ ... @abc.abstractmethod def search(self, sql: str, *args, not_commit: bool = False): """ 执行 查询 SQL语句 :parm sql: SQL语句 :return: """ ... @abc.abstractmethod def insert(self, sql: str, *args, not_commit: bool = False): """ 执行 插入 SQL语句, 并提交 :parm sql: SQL语句 :return: """ ... @abc.abstractmethod def delete(self, sql: str, *args, not_commit: bool = False): """ 执行 删除 SQL语句, 并提交 :parm sql: SQL语句 :return: """ ... @abc.abstractmethod def update(self, sql: str, *args, not_commit: bool = False): """ 执行 更新 SQL语句, 并提交 :parm sql: SQL语句 :return: """ ...