sacn_accout_system/server/db.py

159 lines
4.8 KiB
Python

from .cfg import config
import uuid
import aiomysql
import sys
HOST = config["db"]["host"]
PORT = config["db"]["port"]
USER = config["db"]["user"]
PASSWD = config["db"]["passwd"]
DB = config["db"]["db"]
MAXSIZE = config["db"]["maxsize"]
MINSIZE = config["db"]["minsize"]
async def connect_db():
global db
sys.stdout.write("connect db\n")
db = await aiomysql.create_pool(
host=HOST,
port=PORT,
user=USER,
password=PASSWD,
db=DB,
maxsize=MAXSIZE,
minsize=MINSIZE
)
async def recreate():
global db
db.close()
db = await aiomysql.create_pool(
host=HOST,
port=PORT,
user=USER,
password=PASSWD,
db=DB,
maxsize=MAXSIZE,
minsize=MINSIZE
)
async def create_db():
async with db.acquire() as conn:
await (await conn.cursor()).execute(
"CREATE TABLE IF NOT EXISTS users (username VARCHAR(255) PRIMARY KEY, password VARCHAR(255), email VARCHAR(255), accoutpwd VARCHAR(255))"
)
async def get_user(username: str):
async with db.acquire() as conn:
async with conn.cursor() as cur:
await cur.execute("SELECT username, password FROM users WHERE username = %s", (username,))
result = await cur.fetchone()
if result:
return result[1]
return None
async def get_user_passwd(username: str):
async with db.acquire() as conn:
async with conn.cursor() as cur:
await cur.execute("SELECT accoutpwd FROM users WHERE username = %s", (username,))
result = await cur.fetchone()
if result:
return result[0]
return ""
async def create_user(username: str, password: str, email: str):
async with db.acquire() as conn:
async with conn.cursor() as cur:
# 检查用户是否已存在
await cur.execute("SELECT username FROM users WHERE username = %s", (username,))
if await cur.fetchone():
return 1
# 创建新用户
await cur.execute("INSERT INTO users (username, password, email, accoutpwd) VALUES (%s, %s, %s, %s)", (username, password, email, uuid.uuid4().hex))
await conn.commit()
await recreate()
return 0
async def check_user(username: str):
async with db.acquire() as conn:
async with conn.cursor() as cur:
# 检查用户是否已存在
await cur.execute("SELECT username FROM users WHERE username = %s", (username,))
if await cur.fetchone():
return 1
return 0
async def update_passwd(username: str, password: str):
async with db.acquire() as conn:
async with conn.cursor() as cur:
await cur.execute("UPDATE users SET password = %s WHERE username = %s", (password, username))
await conn.commit()
await recreate()
return 0
async def delete_user(username: str):
async with db.acquire() as conn:
async with conn.cursor() as cur:
await cur.execute("DELETE FROM users WHERE username = %s;COMMIT;", (username))
await conn.commit()
await recreate()
return 0
async def get_email(username: str):
async with db.acquire() as conn:
async with conn.cursor() as cur:
await cur.execute("SELECT email FROM users WHERE username = %s", (username,))
result = await cur.fetchone()
if result:
return result[0]
return None
async def get_userscount():
async with db.acquire() as conn:
async with conn.cursor() as cur:
await cur.execute("SELECT COUNT(*) FROM users")
result = await cur.fetchone()
if result:
return result[0]
return None
async def search_user(page: int, username: str, PAGE_CNT):
async with db.acquire() as conn:
async with conn.cursor() as cur:
username_search = ('WHERE username LIKE "%%'+username +
'%%"' if username != "" else "")
cmd = 'SELECT * FROM users '+username_search+' LIMIT ' + \
str(page*PAGE_CNT-PAGE_CNT)+','+str(PAGE_CNT)+';'
await cur.execute(cmd)
result = await cur.fetchall()
if result:
return [(i[0], i[2]) for i in result]
return None
async def search_user_len(page: int, username: str, PAGE_CNT):
async with db.acquire() as conn:
async with conn.cursor() as cur:
username_search = ('WHERE username LIKE "%%'+username +
'%%"' if username != "" else "")
cmd = 'SELECT COUNT(*) FROM users '+username_search+';'
await cur.execute(cmd)
result = await cur.fetchone()
if result:
return result[0]
return None