diff --git a/.gitignore b/.gitignore index b605254..35df236 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /__pycache__ *.json +APPData.db diff --git a/config.py b/config.py index 012db0c..4929030 100644 --- a/config.py +++ b/config.py @@ -2,4 +2,18 @@ import json def readConf(): with open('config.json') as f: - return json.load(f) \ No newline at end of file + return json.load(f) + +def updateConf(data_dict): + # 打开JSON文件并读取内容 + file_path = 'config.json' + with open(file_path, 'r') as json_file: + existing_data = json.load(json_file) + + # 将新的数据合并到现有的数据中 + existing_data.update(data_dict) + + # 再次打开文件(这次是以写模式),并将更新后的数据保存回文件 + with open(file_path, 'w') as json_file: + json.dump(existing_data, json_file, indent=4, ensure_ascii=False) + diff --git a/db.py b/db.py index 0383951..0d77f1d 100644 --- a/db.py +++ b/db.py @@ -1,29 +1,62 @@ -import pymysql , config , uuid +import config , uuid -def dbIsOK(): - #打开数据库连接 +def getconn(): try: - db = pymysql.connect(host=config.readConf()["db"]["host"], + if config.readConf()["db"]["type"] == "sqlite3": + import sqlite3 + conn = sqlite3.connect("APPData.db") + elif config.readConf()["db"]["type"] == "mysql": + import pymysql + conn = pymysql.connect(host=config.readConf()["db"]["host"], port=config.readConf()["db"]["port"], user=config.readConf()["db"]["user"], password=config.readConf()["db"]["passwd"], database=config.readConf()["db"]["database"]) + return conn + except: + print("DB ERROR") + return 0 +def dbIsOK(): + #打开数据库连接 + if "init" not in config.readConf(): + config.updateConf({"init" : True}) + init() + + try: + getconn() return True except: return False + +def init(): + #打开数据库连接 + db = getconn() + # 使用 cursor() 方法创建一个游标对象 cursor + cursor = db.cursor() + #建表 + cursor.execute( + ''' + CREATE TABLE usersurplus ( + userkey TEXT, + surplus INT); + ''') + # 提交事务 + db.commit() + + # 关闭连接 + db.close() def userSurplus(userkey): #查询userkey剩余配额 #打开数据库连接 - db = pymysql.connect(host=config.readConf()["db"]["host"], - port=config.readConf()["db"]["port"], - user=config.readConf()["db"]["user"], - password=config.readConf()["db"]["passwd"], - database=config.readConf()["db"]["database"]) + db = getconn() # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() # 使用 execute() 方法执行 SQL 查询 - cursor.execute(f"SELECT surplus FROM usersurplus WHERE userkey = %s;",[userkey]) + if config.readConf()["db"]["type"] == "sqlite3": + cursor.execute(f"SELECT surplus FROM usersurplus WHERE userkey = ?;",[userkey]) + else: + cursor.execute(f"SELECT surplus FROM usersurplus WHERE userkey = %s;",[userkey]) # 使用 fetchone() 方法获取单条数据. data = cursor.fetchone() @@ -36,16 +69,15 @@ def userSurplus(userkey): #查询userkey剩余配额 def reduce_value(userkey, value): # 减去对应的值 #打开数据库连接 - db = pymysql.connect(host=config.readConf()["db"]["host"], - port=config.readConf()["db"]["port"], - user=config.readConf()["db"]["user"], - password=config.readConf()["db"]["passwd"], - database=config.readConf()["db"]["database"]) + db = getconn() # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() # 执行 SQL 查询以获取当前值 - cursor.execute(f"SELECT surplus FROM usersurplus WHERE userkey = %s;",[userkey]) + if config.readConf()["db"]["type"] == "sqlite3": + cursor.execute(f"SELECT surplus FROM usersurplus WHERE userkey = ?;",[userkey]) + else: + cursor.execute(f"SELECT surplus FROM usersurplus WHERE userkey = %s;",[userkey]) current_value = cursor.fetchone()[0] # 如果没有找到用户,则返回错误信息 @@ -57,7 +89,10 @@ def reduce_value(userkey, value): # 减去对应的值 new_value = current_value - value # 更新数据库中的值 - cursor.execute(f"UPDATE usersurplus SET surplus= %s WHERE userkey= %s;",[new_value,userkey]) + if config.readConf()["db"]["type"] == "sqlite3": + cursor.execute(f"UPDATE usersurplus SET surplus= ? WHERE userkey= ?;",[new_value,userkey]) + else: + cursor.execute(f"UPDATE usersurplus SET surplus= %s WHERE userkey= %s;",[new_value,userkey]) # 提交事务 db.commit() @@ -70,11 +105,7 @@ def reduce_value(userkey, value): # 减去对应的值 def getAllKey(): #打开数据库连接 - db = pymysql.connect(host=config.readConf()["db"]["host"], - port=config.readConf()["db"]["port"], - user=config.readConf()["db"]["user"], - password=config.readConf()["db"]["passwd"], - database=config.readConf()["db"]["database"]) + db = getconn() # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() @@ -91,16 +122,15 @@ def getAllKey(): def delKey(userkey): #打开数据库连接 - db = pymysql.connect(host=config.readConf()["db"]["host"], - port=config.readConf()["db"]["port"], - user=config.readConf()["db"]["user"], - password=config.readConf()["db"]["passwd"], - database=config.readConf()["db"]["database"]) + db = getconn() # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() # 使用 execute() 方法执行 SQL 查询 - cursor.execute(f"DELETE FROM usersurplus WHERE userkey = %s;", [userkey]) + if config.readConf()["db"]["type"] == "sqlite3": + cursor.execute(f"DELETE FROM usersurplus WHERE userkey = ?;", [userkey]) + else: + cursor.execute(f"DELETE FROM usersurplus WHERE userkey = %s;", [userkey]) # 提交事务 db.commit() @@ -114,24 +144,31 @@ def delKey(userkey): def createKey(quota,number=1,key="null"): #打开数据库连接 - db = pymysql.connect(host=config.readConf()["db"]["host"], - port=config.readConf()["db"]["port"], - user=config.readConf()["db"]["user"], - password=config.readConf()["db"]["passwd"], - database=config.readConf()["db"]["database"]) + db = getconn() # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() # 使用 execute() 方法执行 SQL 查询 output = [] - if key == "null": - for i in range(int(number)): - key = str(uuid.uuid1()) + if config.readConf()["db"]["type"] == "sqlite3": + if key == "null": + for i in range(int(number)): + key = str(uuid.uuid1()) + output.append(key) + cursor.execute(f"INSERT INTO usersurplus (userkey,surplus) VALUES (?, ?);", [key, quota]) + else: + cursor.execute(f"INSERT INTO usersurplus (userkey,surplus) VALUES (?, ?);", [key, quota]) output.append(key) - cursor.execute(f"INSERT INTO usersurplus (userkey,surplus) VALUES (%s, %s);", [key, quota]) else: - cursor.execute(f"INSERT INTO usersurplus (userkey,surplus) VALUES (%s, %s);", [key, quota]) - output.append(key) + if key == "null": + for i in range(int(number)): + key = str(uuid.uuid1()) + output.append(key) + cursor.execute(f"INSERT INTO usersurplus (userkey,surplus) VALUES (%s, %s);", [key, quota]) + else: + cursor.execute(f"INSERT INTO usersurplus (userkey,surplus) VALUES (%s, %s);", [key, quota]) + output.append(key) + # 提交事务 db.commit()