我使用的是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
任何人都可以帮我解决这个问题吗?
答案 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
的环境变量中来实现它。它现在完美运作。