使用python连接到DB2

时间:2015-03-10 16:11:08

标签: python database db2 connect

我使用的是python 2.7,我希望连接到DB2数据库并将数据插入其中。这是我到目前为止所做的:

import sqlalchemy
from sqlalchemy import *
import ibm_db_sa

db2 = sqlalchemy.create_engine('ibm_db_sa://user:pswd@localhost:50001/prm')
metadata = MetaData()
users = Table('users', metadata, 
Column('user_id', Integer, primary_key = True),
Column('user_name', String(16), nullable = False),
Column('email_address', String(60), key='email'),
Column('password', String(20), nullable = False)
)
metadata.bind = db2
metadata.create_all()
users_table = Table('users', metadata, autoload=True, autoload_with=db2)
users_table

问题是当我执行上面的代码时,我得到以下错误:

ProgrammingError: (ProgrammingError) ibm_db_dbi::ProgrammingError: [IBM][CLI Driver]
SQL1042C  An unexpected system error occurred.  SQLSTATE=58004\r SQLCODE=-1042 None None

任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

虽然问题解决了但我写了一下,因为它可能对某人有帮助。

在我的情况下,LD_LIBRARY_PATH和所有lib文件夹都没问题。

在virtualenv中重新安装ibm_db和ibm_db_sa解决了问题。

pip uninstall ibm_db ibm_db_sa
pip install ibm_db ibm_db_sa

我的猜测是在系统中安装了DB2驱动程序之前安装了ibm_db(可能有人忽略了错误/警告)。

检查是否可以首先使用db2cli连接到数据库

db2cli execsql -connstring "DATABASE=database_name;HOSTNAME=db_host;PORT=50000;PROTOCOL=TCPIP;UID=db_user;PWD=db_pass;"

> select 'db_name' from sysibm.sysdummy1

答案 1 :(得分:0)

我最终通过将LD_LIBRARY_PATH添加到值为<YOUR_DB2_HOME>\SQLLIB\lib的环境变量中来实现它。它现在完美运作。

相关问题