mirror of
https://github.com/Lost-MSth/Arcaea-server.git
synced 2026-02-04 21:47:28 +08:00
+ new character + new byd map + new items + some new configs + two new operations in background + record email while registering + record ip while logging in + checking something before running and updating database automatically building something about API fix bugs: about purchasing system about hiding ptt about login different accounts with same device about some details This is only a pre updating. Many things have been changed. It takes time to find some ways.
81 lines
2.4 KiB
Python
81 lines
2.4 KiB
Python
import sqlite3
|
||
from flask import current_app
|
||
import traceback
|
||
|
||
|
||
class Connect():
|
||
# 数据库连接类,上下文管理
|
||
|
||
def __init__(self, file_path='./database/arcaea_database.db'):
|
||
"""
|
||
数据库连接,默认连接arcaea_database.db
|
||
接受:文件路径
|
||
返回:sqlite3连接操作对象
|
||
"""
|
||
self.file_path = file_path
|
||
|
||
def __enter__(self):
|
||
self.conn = sqlite3.connect(self.file_path)
|
||
self.c = self.conn.cursor()
|
||
return self.c
|
||
|
||
def __exit__(self, exc_type, exc_val, exc_tb):
|
||
if self.conn:
|
||
self.conn.commit()
|
||
self.conn.close()
|
||
|
||
if exc_type is not None:
|
||
current_app.logger.error(
|
||
traceback.format_exception(exc_type, exc_val, exc_tb))
|
||
|
||
return True
|
||
|
||
class Sql():
|
||
|
||
@staticmethod
|
||
def select(c, table_name, target_column=[], limit=-1, offset=0, query={}, sort=[]):
|
||
# 执行查询单句sql语句,返回fetchall数据
|
||
# 使用准确查询,且在单表内
|
||
|
||
sql = 'select '
|
||
sql_dict = {}
|
||
if len(target_column) >= 2:
|
||
sql += target_column[0]
|
||
for i in range(1, len(target_column)):
|
||
sql += ',' + target_column[i]
|
||
sql += ' from ' + table_name
|
||
elif len(target_column) == 1:
|
||
sql += target_column[0] + ' from ' + table_name
|
||
else:
|
||
sql += '* from ' + table_name
|
||
|
||
where_field = []
|
||
where_value = []
|
||
for i in query:
|
||
where_field.append(i)
|
||
where_value.append(query[i])
|
||
|
||
if where_field and where_value:
|
||
sql += ' where '
|
||
sql += where_field[0] + '=:' + where_field[0]
|
||
sql_dict[where_field[0]] = where_value[0]
|
||
if len(where_field) >= 2:
|
||
for i in range(1, len(where_field)):
|
||
sql_dict[where_field[i]] = where_value[i]
|
||
sql += ' and ' + where_field[i] + '=:' + where_field[i]
|
||
|
||
if sort:
|
||
sql += ' order by ' + sort[0]['column'] + ' ' + sort[0]['order']
|
||
if len(sort) >= 2:
|
||
for i in range(1, len(sort)):
|
||
sql += ', ' + sort[i]['column'] + ' ' + sort[i]['order']
|
||
|
||
if limit >= 0:
|
||
sql += ' limit :limit offset :offset'
|
||
sql_dict['limit'] = limit
|
||
sql_dict['offset'] = offset
|
||
|
||
c.execute(sql, sql_dict)
|
||
|
||
return c.fetchall()
|