使用pandas pd.read_sql()读取Redshift数据时报版本识别错误如何解决?
报错原因
该错误是当前使用的SQLAlchemy版本无法解析Redshift自定义的版本号字符串导致的:Redshift基于PostgreSQL二次开发,但版本标识格式和原生PostgreSQL不一致,触发了SQLAlchemy版本检测逻辑的断言错误。
可行解决方案
方案1:升级依赖包(最简便)
新版本SQLAlchemy已经兼容Redshift的版本字符串格式,直接执行命令升级相关依赖即可:pip install --upgrade sqlalchemy sqlalchemy-redshift psycopg2-binary
升级完成后重新执行pd.read_sql()即可正常读取数据。方案2:用原生psycopg2连接绕开检测
如果环境受限无法升级依赖,可以直接用psycopg2创建原生数据库连接传给pandas,完全绕开SQLAlchemy的版本检测逻辑,示例代码如下:
import psycopg2 import pandas as pd # 替换为你的Redshift集群信息 conn = psycopg2.connect( host="集群地址", port=5439, user="用户名", password="密码", dbname="数据库名" ) df = pd.read_sql("待执行的SQL查询语句", con=conn) conn.close()
- 方案3:手动打补丁修复版本解析逻辑
如果必须使用当前版本的SQLAlchemy,可以在代码初始化阶段给PostgreSQL方言打补丁,自定义版本解析逻辑,示例代码如下:
from sqlalchemy.dialects.postgresql.base import PGDialect def _parse_version_patch(self, version_string): # 识别到Redshift标识时直接返回兼容的PG版本号,跳过原生解析逻辑 if 'Redshift' in version_string: return (13, 0, 0) return self._original_parse_version(version_string) PGDialect._original_parse_version = PGDialect._parse_version PGDialect._parse_version = _parse_version_patch
补丁执行完成后再创建数据库连接执行查询即可。
内容的提问来源于stack exchange,提问作者Tito Lulu
相关产品推荐
相关产品推荐

