Python语言

前言

本章节主要介绍 Python 应用开发常见问题,为用户提供 Python 应用开发常见问题的分析和解决思路。除此之外,用户还可前往达梦技术社区参与更多问题讨论。

目录

正文

如何关闭 autoCommit 及事务控制相关内容

【问题描述】

如何关闭 autocommit 及事务控制相关内容。

【问题解决】

以下为代码解决方案。

  1. 建表语句。
create table tab1 (
                id   varchar2(32)   ,
                col1 varchar(32)    ,
                col2 varchar(32)    ,
                col3 varchar(32)    ,
                col4 varchar(32)    ,
                col5 varchar(32)    ,
                col6 varchar(32)    ,
                createtime timestamp,
                modifytime timestamp
        );
insert into tab1
select
        rownum as id               ,
        dbms_random.string('x', 20),
        dbms_random.string('x', 20),
        dbms_random.string('x', 20),
        dbms_random.string('x', 20),
        dbms_random.string('x', 20),
        dbms_random.string('x', 20),
        sysdate                    ,
        sysdate
from
        dual connect by level <= 100;
commit;
  1. 示例代码。
# -*- coding:utf-8 -*-
import dmPython

def demo():
    # 关闭自动提交
    conn = dmPython.connect(user='SYSDBA', password='*****', server='localhost', port=5236, autoCommit=True)
    cursor = conn.cursor()

    # 模拟循环处理过程中分步提交控制事务体积
    for i in range(1, 100000):
        str_i = str(i)
        insert_sql = "insert into tab1(col1,col2,col3,col4,col5,col6) values ('%s','%s','%s','%s','%s','%s')" % (
            "colA" + str_i, "colB" + str_i, "colC" + str_i, "colD" + str_i, "colE" + str_i, "colF" + str_i)
        update_sql = "update tab1 set col1='%s' where id=%s" % ("update" + str_i, i)
        delete_sql = "delete from tab1 where id=%s" % (i)
        try:
            cursor.execute(insert_sql)

            # 每10000行提交一次
            if (i % 10000) == 0:
                conn.commit()
        except Exception as err:
            print("error", err)
            conn.rollback()

    conn.commit()
    cursor.close()
    conn.close()

if __name__ == '__main__':
    demo()

Linux 下安装 dmPython 时报错:permission denied

【问题描述】

安装 dmPython 时,报错如下:

[dmdba@dm8 dmPython]$ python setup.py install
running install
error: can't create or remove files in install directory

The following error occurred while trying to add or remove files in the
installation directory:

    [Errno 13] Permission denied: '/usr/lib64/python2.7/site-packages/test-easy-install-3032.write-test'

The installation directory you specified (via --install-dir, --prefix, or
the distutils default setting) was:

    /usr/lib64/python2.7/site-packages/

Perhaps your account does not have write access to this directory?  If the
installation directory is a system-owned directory, you may need to sign in
as the administrator or "root" account.  If you do not have administrative
access to this machine, you may wish to choose a different installation
directory, preferably one that is listed in your PYTHONPATH environment
variable.

For information on other options, you may wish to consult the
documentation at:

  https://pythonhosted.org/setuptools/easy_install.html

Please make the appropriate changes for your system and try again.

[dmdba@dm8 dmPython]$

【问题解决】

由报错信息 '/usr/lib64/python2.7/site-packages/test-easy-install-3032.write-test' 可知:在安装 dmPython 过程中权限不足导致出现报错,不能使用 dmdba 用户执行 setup.py 脚本,需要切换为 root 用户操作。

Linux 下安装 dmPython 时报错:cannot locate an Dameng software installation

【问题描述】

使用如下命令报错:

[root@dm8 ~]# cd /dm/dmdbms/drivers/python/dmPython
[root@dm8 dmPython]# python setup.py install
Traceback (most recent call last):
 File "setup.py", line 103, in <module>
   raise DistutilsSetupError("cannot locate an Dameng software " /
distutils.errors.DistutilsSetupError: cannot locate an Dameng software installation

【问题解决】

这是 DPI 环境问题,因为 dmPython 的运行需要使用 dpi 动态库,应该将 dpi 所在目录(通常是数据库安装目录的 bin 目录)加入系统的环境变量,如图所示:

[root@dm8 dmPython]# cat ~/.bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

export PATH="/dm/dmdbms/bin:$PATH"

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm/dmdbms/bin"
export DM_HOME="/dm/dmdbms"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dm/dmdbms/drivers/dpi/

[root@dm8 dmPython]# source ~/.bash_profile 

Linux 下安装 dmPython 时报错:unable to execute gcc

【问题描述】

使用如下命令报错:

[root@dm8 dmPython]# gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -DDM64 -I/dm/dmdbms/include -I/usr/include/python2.7 -c py_Dameng.c -o build/temp.linux-x86_64-2.7/py_Dameng.o -DBUILD_VERSION=2.3

unable to execute gcc: No such file or directory
error: command 'gcc' failed with exit status 1

【问题解决】

根据报错信息:command 'gcc' failed with exit status 1 可知,缺少 gcc 依赖包,所以直接通过 yum 安装。

[root@dm8 dmPython]# yum install gcc* -y

Liunx 下安装 dmPython 时报错:"Python.h 没有那个文件或目录"

【问题描述】

使用如下命令报错:

[root@RS1821 dmPython]# python setup.py install
running install
running bdist_egg
running egg_info
writing dmPython.egg-info/PKG-INFO
writing top-level names to dmPython.egg-info/top_level.txt
writing dependency_links to dmPython.egg-info/dependency_links.txt
reading manifest file 'dmPython.egg-info/SOURCES.txt'
writing manifest file 'dmPython.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-x86_64/egg
running install_lib
running build_ext
building 'dmPython' extension
gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -DDM64 -I/dm8/include -I/dm8/drivers/python/dmPython -I/usr/include/python2.7 -c py_Dameng.c -o build/temp.linux-x86_64-2.7/py_Dameng.o -DBUILD_VERSION=2.4.4
In file included from py_Dameng.c:3:0:
py_Dameng.h:8:20: 致命错误:Python.h:没有那个文件或目录
 #include <Python.h>
                    ^
编译中断。
error: command 'gcc' failed with exit status 1

【问题解决】

此问题是由于缺少 python-devel 包导致,使用命令 yum install python-devel 安装 devel 包后即可成功安装 dmPython。

Windows 下导入时找不到指定的 dmPython 模块

【问题描述】

使用如下命令报错:

C:\Users\Administrator>python
Python 3.9.6 (tags/v3.9.6:db3ff76, Jun 28 2021, 15:26:21) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import dmPython
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: DLL load failed while importing dmPython: 找不到指定的模块。

【问题解决】

Python 3.8 变更了 Windows 下动态链接库(DLL)的加载规则,新的规则提高了安全性,默认情况下仅能从可信的位置(Trusted Locations)加载 DLL 依赖,一定程度上避免诸如 DLL 劫持之类的安全风险。因此需要搜索路径并把 dpi 文件复制到指定目录下。

Non-ASCII character 'xe5' in file

【问题描述】

编译 Python 程序时,出现错误如下:

SyntaxError: Non-ASCII character '\xe5' in file kNN.py on line 24, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

【问题解决】

Python 默认是以 ASCII 作为编码方式的,如果在自己的 Python 源码中包含了中文(或者其他非英语系的语言),此时即使你把自己编写的 Python 源文件以 UTF-8 格式保存了,这依然是不行的,需要在报错源码的第一行加上以下代码,则指定文件的编码格式是 utf-8。

# -*- coding: UTF-8 -*-

无法解析的外部符号错误

【问题描述】

报错信息如下图:

图片 1.png

【问题解决】

考虑环境变量是否配置正确,以及 python 源码的位数和数据库软件的位数(32 或 64 位)是否一致。

windows 10/11 及 server 2016 版本安装 dmPython 报错

【问题描述】

windows 10/11 及 server 2016 版本测试中安装 dmPython 驱动时会报错:

error: Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for Visual Studio":https://visualstudio.microsoft.com/downloads/Tools

【问题解决】

通过 http://go.microsoft.com/fwlink/?LinkId=691126 ,下载 vc++ build tools 工具,选择默认安装:

图片 2.png

无法识别 django-admin 命令

【问题描述】

报错信息如下图:

图片 1.png

【问题解决】

需要包含 django-admin 的全路径,通常在 python 目录的 scripts 下有 django-admin.exe。

SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xb2 in position 0: invalid start byte

【问题描述】

报错信息如下图:

图片 2.png

【问题解决】

图片.png

代码中文编码和操作系统编码不一致,如上图所示,把编码由 utf-8 修改为 gbk。

'int' object is not subscriptable

【问题描述】

如下图所示:

图片 5.png

【问题解决】

Dmpython 版本和 SQLAlchemy、sqlalchemy-dm 版本不匹配,更新到合适版本,例如 dmPython2.4.5、sqlalchemy2.0.29、sqlalchemy-dm2.0.0。

error:Unable to find vcvarsall.bat

【问题解决】

进入 python 安装目录的 lib/distutils,找到文件 msvc9compiler.py,在文件中找到 vc_env = query_vcvarsall(VSERSION,plat_spec) ,根据使用本机的 VS 版本号进行修改,如:对应安装目录 C:\Program Files\Microsoft Visual Studio 10.0,改为:vc_env = query_vcvarsall(10,plat_spec)

可参考 Python 连接达梦数据库

导入 dmpython 模块时报错找不到指定的模块

【问题描述】

导入 dmpython 模块时报错,代码及报错信息如下:

import dmPython

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

ImportError: DLL load failed: 找不到指定的模块

【问题分析】

因为 dmPython 找不到 DPI 动态库,需要到 DPI 所在目录执行或者配置环境变量指向 DPI 所在目录。

【问题解决】

右键【我的电脑】-【属性】,打开的界面中点击【高级系统设置】,添加环境变量。

变量名:PATH 变量值:DPI 所在路径。

如下图所示:

图片 6.png

然后重新启动 python,输入 import dmPython 就可以了。

图片 7.png

DMPython 驱动在哪里可以找到

【问题解决】

进入 Python 数据库接口下载。

DMPython 的安装教程

【问题解决】

请参考 Python 数据库接口

DMPython 连接 DM,报错 ImportError: No module named dmPython

【问题解决】

若用户已经找到对应的 dmPython 驱动,可以将 Python 路径添加到环境变量,把 dmPython.pyd 文件路径添加到环境变量,在环境变量中添加变量名:

 PYTHONPATH:  F:\dmdbms\drivers\python\dmPython\build\lib.win-amd64-2.7 

若没有对应驱动,可以进入 Python 数据库接口下载。

DMPython 安装报错:不是有效的 Win32 应用程序

【问题描述】

报错信息如下:

importError: DLL load failed: %1 不是有效的 Win32 应用程序。

【问题解决】

本机的达梦数据库是 32 位的,需重新要安装 64 位的数据库。

DMPython 安装报错:依赖 VC++14.0

【问题解决】

C++ 相关组件不完善导致的报错,安装相应依赖即可。

cannot locate an Dameng software

【问题描述】

Python 连接达梦数据库,根据安装提示,切换到 root 用户,报错:

raise DistutilsSetupError("cannot locate an Dameng software " /distutils.errors.DistutilsSetupError: cannot locate an Dameng software installation

【问题解决】

需要依赖 DM 的环境,在 root 用户下配置 DM 的环境变量。

'# User specific environment and startup programs'

PATH=$PATH:$HOME/bin
export PATH
export PATH="/dm/dmdbms/bin:$PATH"

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm/dmdbms/bin"

ImportError: DLL load failed

【问题解决】

检查环境变量配置,加上 dmdbms\bin、dmdbms、dmdbms\drives\dpi 的环境变量。确认生效后,然后进入 dmPython 目录下执行 python setup.py install ,然后再导入驱动。

图片 8.png

导入驱动成功:

图片 9.png

Python 数据 insert 进 DM,报错:codec can't encode character

【问题描述】

Python 达梦数据库插入特殊字符报错,提示:

'gbk' codec can't encode character '\ue622' in position 0: illegal multibyte sequence。

【问题解决】

设置连接参数 local_code。

ImportError: libdmdpi.so: cannot open shared object file: No such file or directory

【问题描述】

导入 dmpython 驱动时,报错如下:

ImportError: libdmdpi.so: cannot open shared object file: No such file or directory

【问题解决】

将数据库的 bin 目录添加进环境变量即可。

匹配没有可登陆的服务器

【问题描述】

达梦数据库里有建立两个用户,这两个用户都能正常登陆数据库。在 python 里面用这两个用户去连接达梦数据库,一个用户可以,一个用户连接的时候报错:“匹配没有可登陆的服务器”。

【问题解决】

这种情况,请检查用户名是否和关键字冲突了。

同一个应用向 DM7.1 和 DM7.6 中插入数据,DM7.1 的库中数据正常,DM7.6 的库中中文出现乱码

【问题解决】

查看应用连接串:

conn = dmPython.connect(user='###', password='###', server='10.221.144.80', port=5236, autoCommit=True)

增加 local_code 参数后改写为:

properties = { 'user' : 'SYSDBA', 'password' : '*****', 'server' : '127.0.0.1', 'port' : 5236, 'autoCommit' : True,'local_code' : 1, }
conn = dmPython.connect(**properties)

Python 使用连接池 PooledDB 连接达梦数据库

【问题解决】

DBUtils 是一套用于管理数据库连接池的 Python 包,为高频高并发的数据库访问提供更好的性能,可以自动管理连接对象的创建和释放,并允许对非线程安全的数据库接口进行线程安全包装。DBUtils.PooledDB 实现了稳定、线程安全的缓存连接池。连接步骤如下:

  1. 安装 DBUtils 包。
pip install DBUtils==1.3
  1. 使用 DBUtils 的连接池 PooledDB 连接达梦数据库示例代码。
import dmPython
from DBUtils.PooledDB import PooledDB

pool = PooledDB(creator=dmPython, mincached=50,maxcached=100, server='192.168.201.118',  port=5236, user='SYSDBA', password='*******')

conn = pool.connection()
cur = conn.cursor()
SQL = "select username from dba_users"
r = cur.execute(SQL)
r = cur.fetchall()
cur.close()
conn.close()

如下图所示:

图片 10.png

Python 运行时报错:load fun EVP_sm3_fun fail!

【问题描述】

Python 运行过程中,执行 python manager.py runserver 出现报错,如下所示:

图片 11.png

【问题解决】

将 dmdbms/drivers/dpi 目录下的 libeay32.dll 和 ssleay32.dll 文件拷贝到 python 所在目录即可。如下所示:

图片 12.png

导入 dmpython 报错 :PyUnicodeUCS2_Format

【问题描述】

使用服务器自带的 python 环境编译 dm 驱动后报错:PyUnicodeUCS2_Format 。

图片 13.png

【问题分析】

通过错误信息分析,unicode 编译环境和运行环境不一致导致报错:

undefiend symbol: PyUnicodeUCS2_Format/PyUnicodeUCS4_Format。

【问题解决】

前提:确保 python 和 dmpython 的 unicode 字符集一致。

使用 unicode 为 ucs4 的 python 环境重新编译 dmPython 驱动。

图片 14.png

将 python 的 unicode 重新编译为 ucs2 。

./configure --enable-shared --enable-unicode=ucs2
make && make install

如果报错:"undefiend symbol: PyUnicodeUCS4_Format" 可以重新将 unicode 为 ucs2 的 python 环境编译成 unicode 为 ucs4 的 python 环境。

./configure --enable-shared --enable-unicode=ucs4
make && make install

SqlAlchemy_dm 插入数据报错:TypeError: 'NoneType' object is not subscriptable

【问题描述】

SqlAlchemy_dm 插入数据时报错:

TypeError: 'NoneType' object is not subscriptable
或者 
ValueError: invalid literal for int() with base 10: 'AAAAAAAAAAAAAAAAAD'?

【问题分析】

新版本数据库的 rowid 是非纯整数,在 SqlAlchemy_dm 源码中可以看到调用 _setup_ins_pk_from_lastrowid 函数时 self.get_lastrowid() 已经是非整数类型,而后 _DMInteger 函数将该 lastrowid 强转为 int ,所以导致报错。

图片 15.png

图片 16.png

【问题解决】

将 dmPython 更新到 2.4.5 版本,并将 SqlAlchemy_dm 驱动更新到最新版本。

安装 dmPython rpm 包成功,但程序使用 import dmPython 报错

【问题描述】

安装 dmPython rpm 包成功,但是程序使用 import dmPython 时报如下错误:

Traceback (most recent call last)
file"<stdin>",line 1 ,in<module>
ImportError :/lib64/libc.so.6:version `GLIBC_2.14` not found (required by /usr/local/lib/python3.7/site-packages/dmPython=2.4.5-py3.7-linux-x86_64.egg)

【问题分析】

该问题主要是由于打包 dmPython 环境的 glibc 版本与安装环境的 glibc 版本不匹配导致。

【问题解决】

使用同版本的 glibc 版本重新打包 dmPython 环境即可解决。

R 语言连接 DM 的主备集群如何以服务名的形式配置高可用?

【问题描述】

R 语言连接 DM 的主备集群如何以服务名的形式配置高可用?

【问题解决】

R 语言连接 DM 数据库有以下两种写法,如果想要连接高可用只能使用第二种写法。

第一种写法:

drv <- dbDriver("Dm")

connect.string <- paste("(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=", dbHost, ")(PORT= 5236))(CONNECT_DATA=(SERVICE_NAME=", dbServerName, ")))", sep = "")

dm8Con <- dbConnect(drv,username = dbUserName, password = dbPassword,dbname = connect.string)

第二种写法(注:dbname 属性为 dm_svc.conf 中的服务名):

dmCon <- dbConnect(drv,username = "SYSDBA", password = "*******",dbname = "DM")

#在 /etc/dm_svc.conf 中填写主备的 IP 及端口信息:

TIME_ZONE=(480)
LANGUAGE=(cn)

DM=(10.130.250.9:5236, 10.130.250.10:5236)
[DM]
LOGIN_MODE=(1)
SWITCH_TIME=(300)
SWITCH_INTERVAL=(200)

使用 django 框架项目启动报错: mportError: cannot import name 'force_text' from 'django.utils.encoding'

【问题描述】

django 框架引入 dmpython+django-dmpython 后项目启动,报错如下:

ImportError: cannot import name 'force_text' from 'django.utils.encoding'。

图片 17.png

【问题分析】

该问题可能是由于以下两种原因导致:

(1)django.utils.encoding 模块导入 force_text 函数,而 DM 的 dmpython 驱动使用的 Django 版本中找不到该函数。

(2)在 Django 3.0 及更高版本中,force_text 函数被移除,并用 force_str 和 force_bytes 函数替代。

【问题解决】

修改 DM 驱动中的 django_dmPython 驱动的 base.py、operations.py、utils.py 文件头部引用。

修改前 from django.utils.encoding import force_bytes, force_text 。

修改后 from django.utils.encoding import force_bytes, force_str 。

使用 django 框架项目启动报错:'django_dmPython' isn't an available database backend xxx

【问题描述】

django 框架引入 dmpython+django-dmpython 后项目启动,报错如下:

"django.core.exceptions.ImproperlyConfigured: 'django_dmPython' isn't an available database backend or 
couldn't be imported. Check the above exception. To use one of the built-in backends, use 
'django.db.backends.XXX', where XXX is one of:'mysql', 'oracle', 'postgresql', 'sqlite3'"。

图片 18.png

【问题分析】

使用 pip install 方式安装的 DM 驱动,驱动包会默认放到与 django 框架的同级目录,而项目启动后扫描的是 django.db.backends 的目录,所以会报错。

【问题解决】

可以通过以下方法尝试解决:

将安装包下的 django_dmPython 目录放到 django.db.backends 目录下。

修改 settings.py 文件中 DATABASES 的 ENGINE 属性为 django.db.backends.django_dmPython。

image.png

django 框架连接 DM 的主备集群如何以服务名的形式配置高可用?

【问题解决】

配置步骤如下:

修改 django 框架 settings.py 中 DATABASES 对象 HOST 属性即可。(这里不必纠结 HOST 以及 PORT 的指向,数据库启动时会自动扫描并替换掉端口)

DATABASES = {
'default': {
   'ENGINE': 'django.db.backends.dm8',
   'NAME': 'DAMENG',
   'USER': 'SYSDBA',
   'PASSWORD': '*****',
   'OPTIONS': {'schema': 'SYSDBA'},
   'HOST': 'DM',
   # 'HOST': '10.15.1.17',
   'PORT': '5237',
}
}

在 /etc/dm_svc.conf 中填写主备的 IP 及端口信息。

TIME_ZONE=(480)
LANGUAGE=(cn)

DM=(10.130.250.9:5236, 10.130.250.10:5236)
[DM]
LOGIN_MODE=(1)
SWITCH_TIME=(300)
SWITCH_INTERVAL=(200)

dmpython 如何使用 sqlalchemy 指定具体的某一个库?

【问题解决】

  1. 首先需要保证需要 SQLAlchemy 版本和 SQLAlchemy_dm 版本对应,可以参考下表:

image.png

例如以下测试环境:

image.png

  1. 在创建连接时使用如下语句:
engine = create_engine('dm://SYSDBA:*****@localhost:5245',connect_args={'schema':'PRODUCTION','connection_timeout':15})

图片.png

使用 pyinstaller 打包 Python 代码为单个 exe 文件报错

【问题描述】

使用 pyinstaller 打包 Python 代码为单个 exe 文件,执行 exe 后报错:“ImportError:DLL load failed while importing dmPython:找不到指定模块。[9800]Failed to execute script 'bayes' due to unhandled exception”。

【问题解决】

  1. 验证打包的输出信息是否完全提示成功,是否存在告警信息。
  2. 通过 find 命令找到的 build 目录下的 dmPyhon.so 复制到自己的打包虚拟环境下的 site-packages。

image.png

dmPython 使用 cursor.var(dmPython.CURSOR) 设置游标报错

【问题描述】

dmPython 调用包的存储过程使用 cursor.var(dmPython.CURSOR) 设置游标时报错:unhandled data type dmPython.CURSOR。

image.png

【问题分析】

dmPython 驱动中目前暂不支持 cursor.var(dmPython.CURSOR) 设置存储过程中的 out 出参游标。

【问题解决】

使用执行 cursor.callproc 函数后返回的变量,然后根据游标的下标值去取值,并手动释放创建的 cursor 变量,示例如下:

def call_proc_t1(object_name):
    conn = dmPython.connect(user='SYSDBA', password='123456', server='81.70.105.201', 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])
    result_cursor = rets[1].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()
微信扫码
分享文档
扫一扫
联系客服