找不到带有IBM_DB的SQLAlchemy引发错误驱动程序

时间:2020-07-31 06:15:51

标签: python orm sqlalchemy db2

Python packages installed- sqlalchemy, ibm_db, ibm_db_sa

    >python
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from sqlalchemy import create_engine
>>> engine = create_engine("db2+ibm_db://useid:password@host:port/db")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\__init__.py", line 500, in create_engine
    return strategy.create(*args, **kwargs)
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\strategies.py", line 87, in create
    dbapi = dialect_cls.dbapi(**dbapi_args)
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\ibm_db_sa\ibm_db.py", line 104, in dbapi
    import ibm_db_dbi as module
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\ibm_db_dbi.py", line 860

    ^
SyntaxError: invalid syntax
>>>

甚至使用过

engine = create_engine("ibm_db_sa+pyodbc400://userid:password@host:port/dbname")

但是出现错误ibm_db_dbi module as moduleodbc driver not found。 如果仅使用ibm_db,但不通过sql_alchemy,则可以连接。 pip已安装sql_alchemyib_dbibm_db_sa

>>> from sqlalchemy.ext.automap import automap_base
>>>
>>> from sqlalchemy.orm import Session
>>>
>>> from sqlalchemy import create_engine
>>>
>>> engine = create_engine("ibm_db_sa+pyodbc400://userId:password@host:port/db") #create a database engine
>>>
>>> Base = automap_base() #creating an automap base object
>>> Base.prepare(engine, reflect=True) #point associate the DB engine with the Auto-map base.
Traceback (most recent call last):
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\base.py", line 2339, in _wrap_pool_connect
    return fn()
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 304, in unique_connection
    return _ConnectionFairy._checkout(self)
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 778, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 495, in checkout
    rec = pool._do_get()
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\impl.py", line 140, in _do_get
    self._dec_overflow()
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\util\langhelpers.py", line 69, in __exit__
    exc_value, with_traceback=exc_tb,
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\util\compat.py", line 178, in raise_
    raise exception
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\impl.py", line 137, in _do_get
    return self._create_connection()
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 309, in _create_connection
    return _ConnectionRecord(self)
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 440, in __init__
    self.__connect(first_connect_check=True)
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 661, in __connect
    pool.logger.debug("Error on connect(): %s", e)
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\util\langhelpers.py", line 69, in __exit__
    exc_value, with_traceback=exc_tb,
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\util\compat.py", line 178, in raise_
    raise exception
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 656, in __connect
    connection = pool._invoke_creator(self)
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\strategies.py", line 114, in connect
    return dialect.connect(*cargs, **cparams)
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\default.py", line 493, in connect
    return self.dbapi.connect(*cargs, **cparams)
pyodbc.InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\ext\automap.py", line 790, in prepare
    autoload_replace=False,
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\sql\schema.py", line 4438, in reflect
    with bind.connect() as conn:
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\base.py", line 2266, in connect
    return self._connection_cls(self, **kwargs)
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\base.py", line 104, in __init__
    else engine.raw_connection()
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\base.py", line 2373, in raw_connection
    self.pool.unique_connection, _connection
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\base.py", line 2343, in _wrap_pool_connect
    e, dialect, self
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\base.py", line 1585, in _handle_dbapi_exception_noconnection
    sqlalchemy_exception, with_traceback=exc_info[2], from_=e
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\util\compat.py", line 178, in raise_
    raise exception
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\base.py", line 2339, in _wrap_pool_connect
    return fn()
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 304, in unique_connection
    return _ConnectionFairy._checkout(self)
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 778, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 495, in checkout
    rec = pool._do_get()
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\impl.py", line 140, in _do_get
    self._dec_overflow()
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\util\langhelpers.py", line 69, in __exit__
    exc_value, with_traceback=exc_tb,
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\util\compat.py", line 178, in raise_
    raise exception
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\impl.py", line 137, in _do_get
    return self._create_connection()
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 309, in _create_connection
    return _ConnectionRecord(self)
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 440, in __init__
    self.__connect(first_connect_check=True)
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 661, in __connect
    pool.logger.debug("Error on connect(): %s", e)
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\util\langhelpers.py", line 69, in __exit__
    exc_value, with_traceback=exc_tb,
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\util\compat.py", line 178, in raise_
    raise exception
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 656, in __connect
    connection = pool._invoke_creator(self)
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\strategies.py", line 114, in connect
    return dialect.connect(*cargs, **cparams)
  File "C:\Users\d953351\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\default.py", line 493, in connect
    return self.dbapi.connect(*cargs, **cparams)
sqlalchemy.exc.InterfaceError: (pyodbc.InterfaceError) ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
(Background on this error at: http://sqlalche.me/e/13/rvf5)

1 个答案:

答案 0 :(得分:0)

您的问题令人困惑,因为它提到了专门用于Db2-for-i系列的pyodbc400。但是在注释中,您写道您的数据库位于Db2-for-Z / OS上。您需要确定

如果您的数据库确实位于Db2-for-Z / OS上,则当前使用sqlalchemy does not support Db2-for-Z/OS。将来可能会改变。

但是,ibm_db模块支持Db2-for-Z / OS,只要您具有相关的Db2连接许可证,或者您的目标数据库已通过db2connectactivate启用,或者您通过单独的Db2-connect-网关。

ibm_db模块支持Linux / Unix / Windows下的Db2,云上的Db2,i的Db2和Z / OS的Db2。

sqlalchemy当前支持Linux / Unix / Windows / cloud的Db2。不确定是否支持i的Db2。