达梦数据库python 操作手册

1、dmPython 安装

从资源中下载dmPython.zip并解压到本地

可以使用如下命令很方便地在 Windows 和 Linux 操作系统下编译并安装 dmPython :

//进入到setup.py所在的源码目录,执行以下命令:

python setup.py install

dmPython接口和dm_svc.conf中功能一致的参数

dmPython 参数 dm_svc.conf 参数
login_timeout CONNECT_TIMEOUT
compress_msg COMPRESS_MSG
ssl_path SSL_CONFIG
ssl_pwd SSL_CONFIG
rwseparate RW_SEPARATE
rwseparate_percent RW_PERCENT
local_code CHAR_CODE
lang_id LANGUAGE

python 连接 dm 方法:

dmPython.connect(*args, **kwargs)

连接属性

关键字 描述 是否必填
user 登录用户名,默认 SYSDBA
password 登录密码,默认 SYSDBA
dsn 包含主库地址和端口号的字符串,格式为“主库地址:端口号”
host/server 主库地址,包括 IP 地址、localhost 或者服务名,默认 localhost,注意 host 和 server 关键字只允许指定其中一个,含义相同
port 端口号,服务器登录端口号,默认 5236
access_mode 连接的访问模式,默认为读写模式
autoCommit DML 操作是否自动提交,默认 TRUE
connection_timeout 执行超时时间(s),默认 0 不限制
login_timeout 登录超时时间(s),默认为 5
txn_isolation 事务隔离级,默认使用服务器的隔离级
app_name 应用程序名
compress_msg 消息是否压缩,压缩算法加载成功时为 TRUE,否则 FALSE
use_stmt_pool 是否开启语句句柄缓存池,默认 TRUE
ssl_path SSL 证书所在的路径,默认为空
ssl_pwd SSL 加密密码,只允许在连接前设置,不允许读取
mpp_login 是否以 LOCAL 方式登录 MPP 系统,默认 FALSE 以 GLOBAL 方式登录 MPP 系统
ukey_name UKEY 登录验证的 UKEY 名,只允许在连接前设置,不允许读取
ukey_pin UKEY 登录验证时的 UKEY 密钥,只允许在连接前设置,不允许读取
rwseparate 是否启用读写分离方式,默认为 FALSE
rwseparate_percent 读写分离比例(%),默认为 25
cursor_rollback_behavior 回滚后游标的状态,默认为不关闭游标
lang_id 错误消息的语言,默认为中文
local_code 客户端字符编码方式,默认当前环境系统编码方式 取值如下:1:PG_UTF8、2:PG_GBK、3:PG_BIG5、4:PG_ISO_8859_9、5:PG_EUC_JP、6:PG_EUC_KR、7:PG_KOI8R、8:PG_ISO_8859_1、9:PG_SQL_ASCII、10:PG_GB18030
cursorclass 取值 dmPython.DictCursor 时,结果集为字典类型;取值为 dmPython.TupleCursor 为列表类型,默认为列表类型
schema 连接默认模式。未设置时,模式为登录用户的默认模式
shake_crypto 客户端传输加密算法所在的加密引擎名
例子:
import dmPython
 
conn = dmPython.connect(user='SYSDBA', password='SYSDBA', server='localhost',
port=5236, autoCommit=True,cursorclass=dmPython.DictCursor)


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

达梦数据库SQL查询报错不是 GROUP BY 表达式解决方法

报错信息:
-4080: 第1 行附近出现错误:
不是 GROUP BY 表达式
解决办法1
##达梦支持灵活的处理方式,可以直接在查询中加hint参数。
/*+ GROUP_OPT_FLAG(1)*/ select  * from table group by name;
解决办法2
#也可以修改dm.ini参数GROUP_OPT_FLAG=1,动态,会话级参数,不用重启数据库。
select para_name,para_value,file_value from v$dm_ini where para_name='GROUP_OPT_FLAG';
sp_set_para_value(1,'GROUP_OPT_FLAG',1);
select * from table group by name;
解决办法3
#达梦还可以配置兼容参数,COMPATIBLE_MODE=4,静态参数,需要重启数据库后生效!
sp_set_para_value(2,'COMPATIBLE_MODE',4);
select para_name,para_value,file_value from v$dm_ini where para_name='COMPATIBLE_MODE';
!!注意修改后需要重启数据库!!
select * from table group by name;

GROUP BY注意事项

使用 GROUP BY 要注意以下问题:
1.在 GROUP BY 子句中的每一列必须明确地命名属于在 FROM 子句中命名的表的一列。分组列的数据类型不能是多媒体数据类型;
2.分组列不能为集函数表达式或者在 SELECT 子句中定义的别名;
3.当分组列值包含空值时,则空值作为一个独立组;
4.当分组列包含多个列名时,则按照 GROUP BY 子句中列出现的顺序进行分组;
5. GROUP BY 子句中至多可包含 255 个分组列; 6. ROLLUP\CUBE\GROUPING SETS 组合不能超过 9 个。

作者:裂痕中的阳光.ゝ

物联沃分享整理
物联沃-IOTWORD物联网 » 达梦数据库python 操作手册

发表回复