Pandas read_sql_query结合SQLAlchemy 2.0报错,求兼容解决方案
问题分析与解决方案
这是兼容性问题,旧版本Pandas对SQLAlchemy 2.0的text()查询存在参数传递冲突,导致报错。
报错原因
SQLAlchemy 2.0中text()对象会携带查询相关的元信息(包括潜在的schema定义),而旧版Pandas的read_sql_query方法在处理时,会错误地将连接对象的schema参数与text()对象中的信息重复传递,触发"multiple values for argument 'schema'"错误。
适配SQLAlchemy 2.0的解决方法
方法1:直接传递SQL字符串(无需text()包裹)
read_sql_query支持直接接收SQL字符串,无需额外用text()处理,同时该方法直接返回DataFrame,不需要再用pd.DataFrame()二次包装:
sql_query = ''' SELECT [StartDate] , [EndDate] FROM [dbo].[Accounts] ''' with source_engine.connect() as source_connection: df_source = pd.read_sql_query(sql_query, source_connection)
方法2:使用text()时显式指定schema=None
如果需要用text()处理带参数绑定的查询,可通过显式设置schema=None避免参数冲突:
from sqlalchemy import text sql_query = text(''' SELECT [StartDate] , [EndDate] FROM [dbo].[Accounts] ''') with source_engine.connect() as source_connection: df_source = pd.read_sql_query(sql_query, source_connection, schema=None)
方法3:升级Pandas到兼容版本
升级Pandas至1.5.3及以上(或2.x系列),新版本已修复与SQLAlchemy 2.0的参数适配问题,无需修改代码即可正常运行。
内容的提问来源于stack exchange,提问作者im8ni6wt
相关产品推荐
相关产品推荐

