5.1 简介及安装
SQLAlchemy 是 python 下的开源软件,提供了 SQL 工具包及对象关系映射(ORM)工具,让应用程序开发人员使用上 SQL 的强大功能和灵活性。sqlalchemy_dm 方言包是 DM 提供用于 SQLAlchemy 连接 DM 数据库的方法。
1.SQLAlchemy 软件的安装。例如:SQLAlchemy-1.1.10.win-amd64-py2.7.exe。
2.sqlalchemy_dm 方言包的软件生成与安装。
sqlalchemy_dm 可以运行在任何安装了 Python 的平台上。生成工具 setup.py 位于 drivers\python\sqlalchemy 目录中。
可以使用如下命令很方便地在 Windows 和 Linux 操作系统下编译并安装 sqlalchemy_dm:
//进入到setup.py所在的源码目录,执行以下命令:
python setup.py install
也可以先生成安装文件再进行安装,不同平台生成安装包的命令如下:
Windows:python setup.py bdist_wininst
Linux:python setup.py bdist_rpm
生成之后的安装包(例如 sqlalchemy_dm-1.1.10.win-amd64.exe)位于 drivers\python\sqlalchemy\dist 目录中。点击安装包安装即可。
DM 提供的 sqlalchemy_dm 与 SQLAlchemy 的版本对应关系如下表:
sqlalchemy_dm 版本 | SQLAlchemy 版本 |
---|---|
1.1.10 | 1.3.x |
1.4.39 | 1.4.x |
2.0.0 | 2.0.x |
5.2 engine 的配置
create_engine()返回一个数据库引擎,下面是 DM 数据库的配置方法。
from sqlalchemy import create_engine
engine =
create_engine('dm://SYSDBA:Dmsys_123@localhost:5236/',connect_args={'local_code':1,'connection_timeout':15})
或
engine =
create_engine('dm+dmPython://SYSDBA:Dmsys_123@localhost:5236/',connect_args={'local_code':1,'connection_timeout':15})
其中,connect_args 是字典选项,只要在 connect_args 中以字典对象的方式配置 dmPython.connect 支持的选项即可。可以包含多个字典对象,用逗号分隔。dmPython.connect 请参考 3.1.1.1 dmPython.connect。其他配置参考 SQLAlchemy 官网 http://docs.sqlalchemy.org 文档。
5.3 类型映射
SQLAlchemy 支持了数据库中使用的大部分类型,根据映射关系,sqlalchemy_dm 方言包支持达梦数据库的下列类型:
BFILE,BIGINT,BINARY,BIT,BLOB,CHAR,CLOB,DATE,DATETIME,DEC,DECIMAL,DOUBLE,DOUBLEPRECISION,FLOAT,INT,INTEGER,INTERVALDAYTOSECOND,LONG,NCLOB,NUMBER,NUMERIC,NVARCHAR2,REAL,SMALLINT,TEXT,TIME,TIMEWITHTIMEZONE,TIMESTAMP,TIMESTAMPWITHTIMEZONE,TINYINT,VARCHAR,VARCHAR2
其中由于 SQLAlchemy 类型支持问题,DECIMAL,DEC 类型在 SQLAlchemy 中均被映射为 NUMERIC 类型,TINYINT 类型被映射为 SMALLINT 类型,CLOB 类型与 LONGVARCHAR 类型被映射为 TEXT 类型 TIME WITH TIME ZONE 类型被映射为 TIME 类型。
5.4 特殊说明
1、SQLAlchemy_dm 当前版本,主键 integer primary_key 不会再自动形成自增列了;
2、只有当 dmPython 版本大于 2.5.9 时才可以正常使用 executemany 返回多行数据集;
3、由于表名标准化问题,克隆或迁移表时,全大写表名将无法识别,请避免使用此类表名;
4、由于语法限制暂不支持使用 bulk_insert_mappings,supports_default_values,supports_empty_insert 等空值插入方法。