From ba3b726c3d22e705115faf16f44bf1aebfb403d0 Mon Sep 17 00:00:00 2001 From: Xargana Date: Mon, 14 Jul 2025 13:50:12 +0300 Subject: [PATCH] optimized the optimizations (fixed mariadb) --- src/database.py | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/src/database.py b/src/database.py index e8b9188..dd7b3ea 100644 --- a/src/database.py +++ b/src/database.py @@ -338,8 +338,7 @@ class MariaDBDatabase: db=self.db_config['db'], minsize=5, maxsize=20, - charset='utf8mb4', - cursorclass=DictCursor + charset='utf8mb4' ) await self._create_tables() await self._create_indexes() @@ -351,7 +350,7 @@ class MariaDBDatabase: async def _create_tables(self): """Create necessary tables if they don't exist.""" async with self.pool.acquire() as conn: - async with conn.cursor() as cursor: + async with conn.cursor(DictCursor) as cursor: await cursor.execute(""" CREATE TABLE IF NOT EXISTS users ( user_id BIGINT PRIMARY KEY, @@ -402,7 +401,7 @@ class MariaDBDatabase: async def _create_indexes(self): """Create performance indexes.""" async with self.pool.acquire() as conn: - async with conn.cursor() as cursor: + async with conn.cursor(DictCursor) as cursor: # Create indexes for better performance indexes = [ "CREATE INDEX IF NOT EXISTS idx_users_username ON users(username)", @@ -435,7 +434,7 @@ class MariaDBDatabase: async def get_user(self, user_id: int) -> Optional[UserData]: """Get user data by ID with associated servers.""" async with self.pool.acquire() as conn: - async with conn.cursor() as cursor: + async with conn.cursor(DictCursor) as cursor: await cursor.execute(""" SELECT u.*, GROUP_CONCAT(us.server_id) AS servers FROM users u @@ -470,7 +469,7 @@ class MariaDBDatabase: async def save_user(self, user_data: UserData): """Save or update user data with transaction.""" async with self.pool.acquire() as conn: - async with conn.cursor() as cursor: + async with conn.cursor(DictCursor) as cursor: try: # Start transaction await cursor.execute("START TRANSACTION") @@ -527,7 +526,7 @@ class MariaDBDatabase: async def save_server(self, server_id: int, server_name: str): """Save server information.""" async with self.pool.acquire() as conn: - async with conn.cursor() as cursor: + async with conn.cursor(DictCursor) as cursor: await cursor.execute(""" INSERT INTO servers (server_id, server_name) VALUES (%s, %s) @@ -542,7 +541,7 @@ class MariaDBDatabase: return {} async with self.pool.acquire() as conn: - async with conn.cursor() as cursor: + async with conn.cursor(DictCursor) as cursor: placeholders = ','.join(['%s'] * len(server_ids)) await cursor.execute(f""" SELECT server_id, server_name @@ -556,7 +555,7 @@ class MariaDBDatabase: async def add_server_to_user(self, user_id: int, server_id: int): """Add a server to user's server list.""" async with self.pool.acquire() as conn: - async with conn.cursor() as cursor: + async with conn.cursor(DictCursor) as cursor: await cursor.execute(""" INSERT IGNORE INTO user_servers (user_id, server_id) VALUES (%s, %s) @@ -565,7 +564,7 @@ class MariaDBDatabase: async def get_all_users(self) -> List[UserData]: """Get all users from the database.""" async with self.pool.acquire() as conn: - async with conn.cursor() as cursor: + async with conn.cursor(DictCursor) as cursor: await cursor.execute(""" SELECT u.*, GROUP_CONCAT(us.server_id) AS servers FROM users u @@ -578,7 +577,7 @@ class MariaDBDatabase: async def get_users_paginated(self, offset: int = 0, limit: int = 100) -> List[UserData]: """Get users with pagination.""" async with self.pool.acquire() as conn: - async with conn.cursor() as cursor: + async with conn.cursor(DictCursor) as cursor: await cursor.execute(""" SELECT u.*, GROUP_CONCAT(us.server_id) AS servers FROM users u @@ -593,7 +592,7 @@ class MariaDBDatabase: async def search_users(self, query: str, offset: int = 0, limit: int = 100) -> List[UserData]: """Search users with pagination.""" async with self.pool.acquire() as conn: - async with conn.cursor() as cursor: + async with conn.cursor(DictCursor) as cursor: # Try full-text search first try: await cursor.execute(""" @@ -629,7 +628,7 @@ class MariaDBDatabase: async def get_user_count_total(self) -> int: """Get total number of users.""" async with self.pool.acquire() as conn: - async with conn.cursor() as cursor: + async with conn.cursor(DictCursor) as cursor: await cursor.execute("SELECT COUNT(*) as count FROM users") result = await cursor.fetchone() return result['count'] if result else 0 @@ -640,7 +639,7 @@ class MariaDBDatabase: return async with self.pool.acquire() as conn: - async with conn.cursor() as cursor: + async with conn.cursor(DictCursor) as cursor: try: await cursor.execute("START TRANSACTION") @@ -707,7 +706,7 @@ class MariaDBDatabase: async def get_users_by_server(self, server_id: int) -> List[UserData]: """Get all users that are members of a specific server.""" async with self.pool.acquire() as conn: - async with conn.cursor() as cursor: + async with conn.cursor(DictCursor) as cursor: await cursor.execute(""" SELECT u.*, GROUP_CONCAT(us.server_id) AS servers FROM users u @@ -721,7 +720,7 @@ class MariaDBDatabase: async def get_user_count(self) -> int: """Get total number of users in database.""" async with self.pool.acquire() as conn: - async with conn.cursor() as cursor: + async with conn.cursor(DictCursor) as cursor: await cursor.execute("SELECT COUNT(*) as user_count FROM users") result = await cursor.fetchone() return result['user_count'] if result else 0 @@ -729,7 +728,7 @@ class MariaDBDatabase: async def get_server_count(self) -> int: """Get total number of unique servers.""" async with self.pool.acquire() as conn: - async with conn.cursor() as cursor: + async with conn.cursor(DictCursor) as cursor: await cursor.execute("SELECT COUNT(DISTINCT server_id) as server_count FROM user_servers") result = await cursor.fetchone() return result['server_count'] if result else 0 @@ -742,7 +741,7 @@ class MariaDBDatabase: } async with self.pool.acquire() as conn: - async with conn.cursor() as cursor: + async with conn.cursor(DictCursor) as cursor: await cursor.execute(""" SELECT server_id, COUNT(user_id) as user_count FROM user_servers