base.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import abc
  2. from typing import List, Dict, Tuple, Union, Optional
  3. import logging.handlers
  4. import logging
  5. from configure import conf
  6. import os
  7. class DBException(Exception):
  8. ...
  9. class DBDoneException(DBException):
  10. ...
  11. class DBCloseException(DBException):
  12. ...
  13. class DBBit:
  14. BIT_0 = b'\x00'
  15. BIT_1 = b'\x01'
  16. class Database(metaclass=abc.ABCMeta):
  17. @abc.abstractmethod
  18. def __init__(self, host: str, name: str, passwd: str, port: str):
  19. self._host = str(host)
  20. self._name = str(name)
  21. self._passwd = str(passwd)
  22. if port is None:
  23. self._port = 3306
  24. else:
  25. self._port = int(port)
  26. self.logger = logging.getLogger("main.database")
  27. self.logger.setLevel(conf["LOG_LEVEL"])
  28. if len(conf["LOG_HOME"]) > 0:
  29. handle = logging.handlers.TimedRotatingFileHandler(
  30. os.path.join(conf["LOG_HOME"], f"mysql-{name}@{host}.log"), backupCount=10)
  31. handle.setFormatter(logging.Formatter(conf["LOG_FORMAT"]))
  32. self.logger.addHandler(handle)
  33. @abc.abstractmethod
  34. def close(self):
  35. """
  36. 关闭数据库, 此代码执行后任何成员函数再被调用其行为是未定义的
  37. :return:
  38. """
  39. ...
  40. @abc.abstractmethod
  41. def is_connect(self) -> bool:
  42. """
  43. :return: 是否处于连接状态
  44. """
  45. ...
  46. @abc.abstractmethod
  47. def get_cursor(self) -> any:
  48. """
  49. :return: 返回数据库游标
  50. """
  51. ...
  52. @abc.abstractmethod
  53. def search(self, sql: str, *args, not_commit: bool = False):
  54. """
  55. 执行 查询 SQL语句
  56. :parm sql: SQL语句
  57. :return:
  58. """
  59. ...
  60. @abc.abstractmethod
  61. def insert(self, sql: str, *args, not_commit: bool = False):
  62. """
  63. 执行 插入 SQL语句, 并提交
  64. :parm sql: SQL语句
  65. :return:
  66. """
  67. ...
  68. @abc.abstractmethod
  69. def delete(self, sql: str, *args, not_commit: bool = False):
  70. """
  71. 执行 删除 SQL语句, 并提交
  72. :parm sql: SQL语句
  73. :return:
  74. """
  75. ...
  76. @abc.abstractmethod
  77. def update(self, sql: str, *args, not_commit: bool = False):
  78. """
  79. 执行 更新 SQL语句, 并提交
  80. :parm sql: SQL语句
  81. :return:
  82. """
  83. ...