update: 更新了对Redis数据库的支持, 并取消了对MySQL的支持

This commit is contained in:
MarkusJoe
2022-10-02 17:30:12 +08:00
parent a8884baa3a
commit 4a21ca730f
1 file changed
+58 -20
+58 -20
View File
@@ -10,11 +10,10 @@ import os
from src.db import operator from src.db import operator
class DatabaseSQL: class Base:
def __init__(self): def __init__(self):
self.conn = None self.conn = None
self.cursor = None self.cursor = None
self.target = None
def __del__(self): def __del__(self):
self.conn.commit() self.conn.commit()
@@ -31,7 +30,7 @@ class DatabaseSQL:
return result return result
def insert(self, _id: str) -> bool: def insert(self, _id: str) -> bool:
self.cursor.execute('insert into data (id, times) values (%s, 1);' % self.target % _id) self.cursor.execute('insert into data (id, times) values (%s, 1);' % _id)
return True return True
def update(self, _id: str, times: int) -> bool: def update(self, _id: str, times: int) -> bool:
@@ -45,32 +44,71 @@ class DatabaseSQL:
return result return result
def query_image(self, theme: str) -> list: def query_image(self, theme: str) -> list:
self.cursor.execute('select * from %s;' % self.target % theme) self.cursor.execute('select * from %s;' % theme)
result = self.cursor.fetchall() result = self.cursor.fetchall()
return result return result
class SQLite(DatabaseSQL): class SQLite(Base):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.conn = operator.connect('./src/db/data.sqlite') self.conn = operator.connect('./src/db/data.sqlite')
self.cursor = self.conn.cursor() self.cursor = self.conn.cursor()
self.target = '"%s"'
class MySQL(DatabaseSQL): class Redis(Base):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
user = os.getenv('m_user') self.host: str = os.getenv('c_host')
pwd = os.getenv('m_password') self.port: int = int(os.getenv('c_port'))
host = os.getenv('m_host') self.password: str = os.getenv('c_password') # if is None then it is None. lol
port = int(os.getenv('m_port')) self.conn = operator.Redis(host=self.host,
db = os.getenv('m_database') port=self.port,
self.conn = operator.connect(host=host, password=self.password,
user=user, decode_responses=True)
password=pwd,
port=port, def __del__(self):
database=db self.conn.close()
)
self.cursor = self.conn.cursor() def query(self, _id: str) -> tuple:
self.target = 'Counter.%s' return self._get(_id)
def insert(self, _id: str) -> bool:
return self._set(_id)
def update(self, _id: str, times: int) -> bool:
return self._set(_id, times)
def query_all(self) -> list:
return self._get_all()
def query_image(self, theme: str) -> list:
return self._get_image(theme)
def _get(self, _id: str) -> tuple:
result = self.conn.get(_id)
if result is None:
self._set(_id)
return tuple([_id, 0])
self._set(_id, int(result))
return tuple([_id, int(result)])
def _set(self, _id: str, times: int = 0) -> bool:
times += 1
return self.conn.set(_id, times)
def _get_all(self) -> list:
results = self.conn.keys()
return results
def _get_image(self, theme: str) -> list:
images = []
for i in range(10):
images.append([i, self.conn.get(f'{theme}-{i}')])
width = int(self.conn.get(f'{theme}-width'))
height = int(self.conn.get(f'{theme}-height'))
for j in range(10):
images[j].append(width)
images[j].append(height)
return images