dmPython运行报错unhandled data type dmPython.CURSOR
这个场景主要是dmPython调用存储过程的函数,同时返回的类型是一个Cursor类型,在dmPython中使用result_cursor = cursor.var(dmPython.CURSOR)报错导致的。
解决方案如下:
dmPython采用的是执行cursor.callproc函数后返回的变量然后根据游标的下标值去取值,需要手动释放创建的cursor变量
def call_proc_t1(object_name):
conn = dmPython.connect(user='SYSDBA', password='123456', server='127.0.0.1', port=5236, local_code=1)
cursor = conn.cursor()
# 定义输出游标
data_cursor = conn.cursor()
# 调用包中的函数
rets = cursor.callproc('pkg_dba_objects.get_dba_objects', [object_name,data_cursor])
# var = rets[0].description
# 获取游标中的数据
result_cursor = rets[1].fetchall() # 直接调用 fetchall() 获取所有行数据
# 输出查询结果
print('')
for row in result_cursor:
print(f"Object Name: {row[0]}, Object Type: {row[1]}, Status: {row[2]}")
# 释放游标
data_cursor.close()
conn.close()
# 按装订区域中的绿色按钮以运行脚本。
if __name__ == '__main__':
call_proc_fail('DM_TAB_2025')
顺带提供一个oracle的示例
import cx_Oracle
# pip install cx_Oracle --upgrade
def call_proc(object_name):
tns = cx_Oracle.makedsn("192.168.112.160","1521","oracle") #监听Oracle数据库
connection = cx_Oracle.connect("SCOTT","oracle",tns) #连接数据库
cursor = connection.cursor()
# 定义输出游标
result_cursor = cursor.var(cx_Oracle.CURSOR)
# 调用存储过程
cursor.callproc('pkg_dba_objects.get_dba_objects', [object_name, result_cursor])
# 获取 REF CURSOR 中的数据
result = result_cursor.getvalue()
# 遍历并打印查询结果
for row in result:
print(f"Object Name: {row[0]}, Object Type: {row[1]}, Status: {row[2]}")
# 关闭游标和连接
cursor.close()
connection.close()
if __name__ == '__main__':
call_proc('HS_USER')
更多内容需关注公众号:DM课代表。每天分享DM数据库的相关内容