162 lines
4.6 KiB
Python
162 lines
4.6 KiB
Python
# 假设有一个数据库辅助类,你需要根据实际环境实现
|
|
import json
|
|
import pymysql
|
|
|
|
|
|
class DB:
|
|
def __init__(self, host, user, password, database, port=3306, charset="utf8mb4"):
|
|
"""
|
|
初始化数据库连接
|
|
"""
|
|
self.connection = pymysql.connect(
|
|
host=host,
|
|
user=user,
|
|
password=password,
|
|
database=database,
|
|
port=port,
|
|
charset=charset,
|
|
cursorclass=pymysql.cursors.DictCursor,
|
|
)
|
|
self.last_insert_id = None
|
|
|
|
def _execute(self, sql, params=None):
|
|
"""
|
|
内部方法:执行SQL并返回cursor
|
|
"""
|
|
try:
|
|
with self.connection.cursor() as cursor:
|
|
cursor.execute(sql, params or ())
|
|
return cursor
|
|
except Exception as e:
|
|
print(f"SQL执行错误: {e}\nSQL: {sql}")
|
|
raise
|
|
|
|
def getOne(self, sql):
|
|
# 模拟查询一行
|
|
cursor = self._execute(sql)
|
|
return cursor.fetchone()
|
|
|
|
def getone(self, sql):
|
|
# PHP代码中混用了getOne和getone,通常功能一致
|
|
return self.getOne(sql)
|
|
|
|
def query(self, sql):
|
|
"""
|
|
执行SQL (通常用于无返回结果的操作,如UPDATE, DELETE, CREATE等)
|
|
"""
|
|
try:
|
|
with self.connection.cursor() as cursor:
|
|
result = cursor.execute(sql)
|
|
self.connection.commit()
|
|
# 记录最后插入的ID (如果是INSERT操作)
|
|
self.last_insert_id = cursor.lastrowid
|
|
return result
|
|
except Exception as e:
|
|
self.connection.rollback()
|
|
print(f"Query执行失败: {e}\nSQL: {sql}")
|
|
raise
|
|
|
|
def query_array(self, sql):
|
|
"""
|
|
查询多行
|
|
"""
|
|
cursor = self._execute(sql)
|
|
return cursor.fetchall()
|
|
|
|
def insert_array(self, data, table):
|
|
"""
|
|
插入数据
|
|
:param data: 字典,例如 [{'name': 'Alice', 'age': 25}]
|
|
:param table: 表名
|
|
"""
|
|
if not data:
|
|
return False
|
|
|
|
columns = ", ".join(data[0].keys())
|
|
# 使用占位符防止SQL注入
|
|
placeholders = ", ".join(["%s"] * len(data[0]))
|
|
values = [tuple(item.values()) for item in data]
|
|
|
|
sql = f"INSERT INTO {table} ({columns}) VALUES ({placeholders})"
|
|
|
|
try:
|
|
with self.connection.cursor() as cursor:
|
|
cursor.executemany(sql, values)
|
|
self.connection.commit()
|
|
self.last_insert_id = cursor.lastrowid
|
|
return self.last_insert_id
|
|
except Exception as e:
|
|
self.connection.rollback()
|
|
print(f"插入数据失败: {e}")
|
|
raise
|
|
|
|
def insert_id(self):
|
|
"""
|
|
获取最后插入ID
|
|
"""
|
|
return self.last_insert_id
|
|
|
|
def close(self):
|
|
"""
|
|
关闭数据库连接
|
|
"""
|
|
if self.connection:
|
|
self.connection.close()
|
|
|
|
|
|
db = DB(host="localhost", user="fire", password="iTSJSPPZM3LSGAPC", database="fire")
|
|
|
|
file_name = "simulator_log_super_1776010009.7211218.log"
|
|
|
|
|
|
with open(file_name, "r") as f:
|
|
type = ""
|
|
if "super" in file_name:
|
|
type = "_super"
|
|
elif "normal" in file_name:
|
|
type = ""
|
|
elif "standard" in file_name:
|
|
type = "_free"
|
|
|
|
# db.query("truncate table game_sugar_spin{type}".format(type=type))
|
|
# db.query("truncate table game_sugar_step_info{type}".format(type=type))
|
|
|
|
spins = []
|
|
steps_data = []
|
|
index = 0
|
|
startGid = 10000
|
|
for line in f.readlines():
|
|
index += 1
|
|
data = json.loads(line)
|
|
|
|
data["gid"] = startGid + data['gid']
|
|
|
|
steps = data["steps"]
|
|
for step in steps:
|
|
step["gid"] = data["gid"]
|
|
step["symbol_links"] = json.dumps(
|
|
step["symbol_links"], separators=(",", ":"), ensure_ascii=False
|
|
)
|
|
step["multipler"] = json.dumps(
|
|
step["multipler"], separators=(",", ":"), ensure_ascii=False
|
|
)
|
|
steps_data.append(step)
|
|
|
|
del data["steps"]
|
|
spins.append(data)
|
|
|
|
if len(spins) > 100:
|
|
db.insert_array(spins, f"game_sugar_spin{type}")
|
|
spins = []
|
|
print(f"写入进度: {index}个spin")
|
|
if len(steps_data) > 300:
|
|
db.insert_array(steps_data, f"game_sugar_step_info{type}")
|
|
steps_data = []
|
|
|
|
if len(spins) > 0:
|
|
db.insert_array(spins, f"game_sugar_spin{type}")
|
|
spins = []
|
|
if len(steps_data) > 0:
|
|
db.insert_array(steps_data, f"game_sugar_step_info{type}")
|
|
steps_data = []
|