为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:Win11
【CPU】:
【问题描述】*:我在开发一个python程序访问数据库,基于dmpython,然而查询会一直卡住,此时数据库连接工具SQLARK或DATAGRIP查询数据表,会一直转圈,刷不出来数据。但是换无线网之后,dmpython能正常查询写入数据、数据库工具也正常看数据。有没有办法从达梦日志或是什么地方可以排查原因
相关python查询数据代码:
1、封装类
class DataBase:
def init(self):
self.conn = None
def enter(self):
db_config = config.config.get_current_db_config()
if(db_config['DB_TYPE']=='DM'):
import dmPython
self.conn = dmPython.connect(user=db_config['USER'], password=db_config['PWD'], server=db_config['HOST'],
port=db_config['PORT'], autoCommit=True)
return self
def exit(self, exc_type, exc_val, exc_tb):
if self.conn:
self.conn.close()
def execute(self, sql, params=None, is_query=True):
if not self.conn:
raise ValueError("Database connection not initialized")
cursor = self.conn.cursor()
cursor.execute(sql, params or ())
if sql.strip().lower().startswith("select"):
return cursor.fetchall()
def get_dataframe(self, query, params=None):
if not self.conn:
raise ValueError("Database connection not initialized")
with self.conn:
cursor = self.conn.cursor()
cursor.execute(query, params or ())
# 处理查询结果
if cursor.description: # 检查是否有结果列
columns = [col[0] for col in cursor.description] # 获取字段名列表
results = [dict(zip(columns, row)) for row in cursor.fetchall()]
df_raw = pd.DataFrame(results)
return df_raw
else:
# 若查询没有结果列(如INSERT、UPDATE等),返回空DataFrame
return pd.DataFrame()
2、具体查询代码
with DataBase() as db:
df_raw = db.get_dataframe(sql, params)
1、看看是不是 dm_svc.conf 问题:
删除或修正该文件中的错误配置。如果是单机环境,建议直接移除或注释掉所有配置项。
2、如果是网络设备DPI拦截(最可能的情况):
终极方案:联系网络管理员,沟通办公网到数据库服务器之间的防火墙策略。请求将你的办公电脑IP加入白名单,或禁用对该IP:端口流量进行应用层检测(DPI)。

补充报错: cursor.execute(query, params or ())
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
dmPython.DatabaseError: [CODE:-70019]网络通讯失败