达梦数据库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 个。
作者:裂痕中的阳光.ゝ