导入ibm_db_sa报错:AttributeError: 'String'无'RETURNS_CONDITIONAL'属性
解决ibm_db_sa导入时的AttributeError问题
环境信息
- 操作系统:Win 10 22H2
- Python版本:3.9.13
- 安装路径:
C:\Program Files\Python39 - ibm-db版本:3.1.4
- ibm-db-sa版本:0.3.9
- SQLAlchemy版本:2.0.7
问题现象
进入Python交互环境后,import ibm_db正常执行,但执行import ibm_db_sa时触发报错:
PS C:\windows\system32> python -i Python 3.9.13 (tags/v3.9.13:6de2ca5, May 17 2022, 16:36:42) [MSC v.1929 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import ibm_db >>> import ibm_db_sa Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Program Files\Python39\lib\site-packages\ibm_db_sa\__init__.py", line 22, in <module> from . import ibm_db, pyodbc, base File "C:\Program Files\Python39\lib\site-packages\ibm_db_sa\ibm_db.py", line 20, in <module> from .base import DB2ExecutionContext, DB2Dialect File "C:\Program Files\Python39\lib\site-packages\ibm_db_sa\base.py", line 662, in <module> class DB2Dialect(default.DefaultDialect): File "C:\Program Files\Python39\lib\site-packages\ibm_db_sa\base.py", line 675, in DB2Dialect returns_unicode_strings = sa_types.String.RETURNS_CONDITIONAL AttributeError: type object 'String' has no attribute 'RETURNS_CONDITIONAL' >>>
问题根源
ibm_db_sa 0.3.9仅适配SQLAlchemy 1.x版本,而SQLAlchemy 2.0.x系列已移除String.RETURNS_CONDITIONAL属性,导致旧版ibm_db_sa调用该属性时抛出错误。
解决方案
提供两种可靠的解决途径:
1. 降级SQLAlchemy至兼容版本
执行命令将SQLAlchemy降级到1.4.x长期支持版,该版本完美兼容ibm_db_sa 0.3.9:
pip install sqlalchemy==1.4.49
2. 升级ibm_db_sa到支持SQLAlchemy 2.0的版本
通过命令升级ibm_db_sa到最新兼容版:
pip install --upgrade ibm-db-sa
升级前请确认最新版ibm_db_sa的兼容性说明,确保与当前的ibm-db 3.1.4版本匹配。
内容的提问来源于stack exchange,提问作者Paul Nema
相关产品推荐
相关产品推荐

