[core] Address SQLAlchemy deprecations

This commit is contained in:
2024-11-18 10:49:41 +07:00
parent 58a5177a30
commit c11aae58a6
6 changed files with 156 additions and 79 deletions

View File

@ -3,7 +3,7 @@ from typing import List, Optional
import bcrypt
from sqlalchemy import Column, Table
from sqlalchemy.dialects.mysql import insert
from sqlalchemy.engine import Row
from sqlalchemy.engine import Row, RowMapping
from sqlalchemy.sql import func, select
from sqlalchemy.types import TIMESTAMP, Integer, String
@ -23,6 +23,7 @@ aime_user: Table = Table(
mysql_charset="utf8mb4",
)
class UserData(BaseData):
async def create_user(
self,
@ -57,28 +58,28 @@ class UserData(BaseData):
return None
return result.lastrowid
async def get_user(self, user_id: int) -> Optional[Row]:
async def get_user(self, user_id: int) -> Optional[RowMapping]:
sql = select(aime_user).where(aime_user.c.id == user_id)
result = await self.execute(sql)
if result is None:
return False
return result.fetchone()
return result.mappings().fetchone()
async def check_password(self, user_id: int, passwd: bytes = None) -> bool:
usr = await self.get_user(user_id)
if usr is None:
return False
if usr["password"] is None:
if usr.password is None:
return False
if passwd is None or not passwd:
return False
return bcrypt.checkpw(passwd, usr["password"].encode())
return bcrypt.checkpw(passwd, usr.password.encode())
async def delete_user(self, user_id: int) -> None:
sql = aime_user.delete(aime_user.c.id == user_id)
sql = aime_user.delete().where(aime_user.c.id == user_id)
result = await self.execute(sql)
if result is None:
@ -103,24 +104,35 @@ class UserData(BaseData):
return result.fetchone()
async def find_user_by_username(self, username: str) -> List[Row]:
sql = aime_user.select(aime_user.c.username.like(f"%{username}%"))
sql = aime_user.select().where(aime_user.c.username.like(f"%{username}%"))
result = await self.execute(sql)
if result is None:
return False
return result.fetchall()
async def change_password(self, user_id: int, new_passwd: str) -> bool:
sql = aime_user.update(aime_user.c.id == user_id).values(password = new_passwd)
sql = (
aime_user.update()
.where(aime_user.c.id == user_id)
.values(password=new_passwd)
)
result = await self.execute(sql)
return result is not None
async def change_username(self, user_id: int, new_name: str) -> bool:
sql = aime_user.update(aime_user.c.id == user_id).values(username = new_name)
sql = (
aime_user.update()
.where(aime_user.c.id == user_id)
.values(username=new_name)
)
result = await self.execute(sql)
return result is not None
async def get_user_by_username(self, username: str) -> Optional[Row]:
result = await self.execute(aime_user.select(aime_user.c.username == username))
if result: return result.fetchone()
async def get_user_by_username(self, username: str) -> Optional[RowMapping]:
result = await self.execute(
aime_user.select().where(aime_user.c.username == username)
)
if result:
return result.mappings().fetchone()