该自述文件
ibm_db_sa中“支持的数据库”一节中列出仅DB2用于Linux / UNIX /
Windows的。因此,它很可能不适用于DB2 for i,至少不是开箱即用。
既然您已经说过具有Windows的IBM System i
Access,我强烈建议您仅使用它附带的一种驱动程序(如@Charles所述,是ODBC,OLEDB或ADO.NET)。
就个人而言,我总是将ODBC与
pyodbc或一起使用
pypyodbc。两种都可以。一个简单的例子:
import pyodbcconnection = pyodbc.connect( driver='{iSeries Access ODBC Driver}', system='11.22.33.44', uid='username', pwd='password')c1 = connection.cursor()c1.execute('select * from qsys2.sysschemas')for row in c1: print row现在,SQLAlchemy的连接方法之一是
pyodbc,所以我认为,如果您可以
pyodbc直接使用建立连接,则可以通过某种方式配置SQLAlchemy来执行相同的操作。但是我自己不是SQLAlchemy用户,因此我没有相应的示例代码。
更新
我设法让SQLAlchemy连接到我们的IBM i并执行直接的SQL查询。换句话说,使其具有与直接使用PyODBC大致相同的功能。
我还没有测试任何其他SQLAlchemy功能。 我在Windows 7计算机上设置连接的操作:
ibm_db_sa
作为SQLAlchemy方言安装
您也许可以使用pip
此方法,但是我以低技术的方式做到了:ibm_db_sa
从PyPI下载。
撰写本文时,最新版本为0.3.2,于2014-10-20上传。可以想象以后的版本将以不同的方式被修复或破坏(因此,将来,我将要描述的修改可能是不必要的,或者可能行不通)。解压缩档案(
ibm_db_sa-0.3.2.tar.gz
),然后将随附的ibm_db_sa
目录复制到该sqlalchemydialects
目录中。修改
sqlalchemydialectsibm_db_sapyodbc.py
添加
initialize()
方法的AS400Dialect_pyodbc
类
的这点是覆盖同名的方法DB2Dialect
,它AS400Dialect_pyodbc
从继承。问题是DB2Dialect.initialize()
尝试设置属性dbms_ver
和dbms_name
,当使用PyODBC连接到IBM
i时,这两个属性都不可用或不相关(据我所知)。添加模块级名称
dialect
并将其设置为AS400Dialect_pyodbc
类
上述修改的代码应该放在文件的末尾,如下所示:
def initialize(self, connection): super(DB2Dialect, self).initialize(connection)dialect = AS400Dialect_pyodbc
注意缩进! 请记住,该
initialize()方法必须属于
AS400Dialect_pyodbc该类,并且
dialect需要对模块是全局的。
最后,您需要为引擎创建者提供正确的URL:
'ibm_db_sa + pyodbc:// username:password @ host / * local'
(显然,替代有效值
username,
password和
host)。
而已。此时,您应该能够创建引擎,连接到i并通过SQLAlchemy执行纯SQL。我认为许多ORM东西也应该在这一点上起作用,但我尚未对此进行验证。



