Skip to content

Commit 4df09f1

Browse files
authored
Merge pull request aliyun#24 from junliang-xjl/feature/query_sql
Optimize query sql
2 parents c97f2c2 + 5387e49 commit 4df09f1

File tree

2 files changed

+20
-18
lines changed

2 files changed

+20
-18
lines changed

src/alibabacloud_rds_openapi_mcp_server/db_service.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import asyncio
12
import json
23
import random
34
import socket
@@ -60,24 +61,24 @@ def __init__(self,
6061
self.__client = get_rds_client(region_id)
6162
self.__db_conn = None
6263

63-
def __enter__(self):
64-
self._get_db_instance_info()
64+
async def __aenter__(self):
65+
await asyncio.to_thread(self._get_db_instance_info)
6566
if not self.__account_name or not self.__account_password:
66-
self._create_temp_account()
67+
await asyncio.to_thread(self._create_temp_account)
6768
if self.database:
68-
self._grant_privilege()
69+
await asyncio.to_thread(self._grant_privilege)
6970
else:
7071
self.account_name = self.__account_name
7172
self.account_password = self.__account_password
7273
self.__db_conn = DBConn(self)
73-
self.__db_conn.connect()
74+
await asyncio.to_thread(self.__db_conn.connect)
7475
return self
7576

76-
def __exit__(self, exc_type, exc_val, exc_tb):
77+
async def __aexit__(self, exc_type, exc_val, exc_tb):
7778
if self.__db_conn is not None:
78-
self.__db_conn.close()
79+
await asyncio.to_thread(self.__db_conn.close)
7980
if not self.__account_name or not self.__account_password:
80-
self._delete_account()
81+
await asyncio.to_thread(self._delete_account)
8182
self.__client = None
8283

8384
def _get_db_instance_info(self):
@@ -142,8 +143,8 @@ def _delete_account(self):
142143
)
143144
self.__client.delete_account(req)
144145

145-
def execute_sql(self, sql):
146-
return self.__db_conn.execute_sql(sql)
146+
async def execute_sql(self, sql):
147+
return await asyncio.to_thread(self.__db_conn.execute_sql, sql)
147148

148149
@property
149150
def user(self):
@@ -214,6 +215,7 @@ def execute_sql(self, sql):
214215
result = [dict(zip(columns, row)) for row in rows]
215216
else:
216217
result = []
218+
cursor.close()
217219
try:
218220
return json.dumps(result, ensure_ascii=False)
219221
except Exception as e:

src/alibabacloud_rds_openapi_mcp_server/server.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1559,8 +1559,8 @@ async def show_engine_innodb_status(
15591559
the sql result.
15601560
"""
15611561
try:
1562-
with DBService(region_id, dbinstance_id) as service:
1563-
return service.execute_sql("show engine innodb status")
1562+
async with DBService(region_id, dbinstance_id) as service:
1563+
return await service.execute_sql("show engine innodb status")
15641564
except Exception as e:
15651565
logger.error(f"Error occurred: {str(e)}")
15661566
raise e
@@ -1584,8 +1584,8 @@ async def show_create_table(
15841584
the sql result.
15851585
"""
15861586
try:
1587-
with DBService(region_id, dbinstance_id, db_name) as service:
1588-
return service.execute_sql(f"show create table {db_name}.{table_name}")
1587+
async with DBService(region_id, dbinstance_id, db_name) as service:
1588+
return await service.execute_sql(f"show create table {db_name}.{table_name}")
15891589
except Exception as e:
15901590
logger.error(f"Error occurred: {str(e)}")
15911591
raise e
@@ -1608,8 +1608,8 @@ async def explain_sql(
16081608
the sql execute plan.
16091609
"""
16101610
try:
1611-
with DBService(region_id, dbinstance_id, db_name) as service:
1612-
return service.execute_sql(f"explain {sql}")
1611+
async with DBService(region_id, dbinstance_id, db_name) as service:
1612+
return await service.execute_sql(f"explain {sql}")
16131613
except Exception as e:
16141614
logger.error(f"Error occurred: {str(e)}")
16151615
raise e
@@ -1633,8 +1633,8 @@ async def query_sql(
16331633
the sql result.
16341634
"""
16351635
try:
1636-
with DBService(region_id, dbinstance_id, db_name) as service:
1637-
return service.execute_sql(sql=sql)
1636+
async with DBService(region_id, dbinstance_id, db_name) as service:
1637+
return await service.execute_sql(sql=sql)
16381638
except Exception as e:
16391639
logger.error(f"Error occurred: {str(e)}")
16401640
raise e

0 commit comments

Comments
 (0)