You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用snowflake-sqlalchemy时出现ImportError:无法导入_rfc_1738_quote

问题:Snowflake-SQLAlchemy 导入错误 _rfc_1738_quote

我使用snowflake-sqlalchemy包连接Snowflake,代码如下:

from sqlalchemy import create_engine
engine = create_engine(...)

这段代码之前运行正常,但现在抛出导入异常。尝试切换snowflake-sqlalchemy旧版本后问题仍未解决。

完整错误堆栈:

File "/Users/Etienne.Herlaut/Repositories/python/performance-hub-apps/utils/snowflake.py", line 19, in get_snowflake_connection
    engine = create_engine(f'snowflake://{sf_user}:{sf_password}@{sf_account}?warehouse={wh}&role={role}', connect_args={'timeout': 120})
  File "<string>", line 2, in create_engine
    
  File "/Users/Etienne.Herlaut/.pyenv/versions/3.8.13/lib/python3.8/site-packages/sqlalchemy/util/deprecations.py", line 309, in warned
    return fn(*args, **kwargs)
  File "/Users/Etienne.Herlaut/.pyenv/versions/3.8.13/lib/python3.8/site-packages/sqlalchemy/engine/create.py", line 522, in create_engine
    entrypoint = u._get_entrypoint()
  File "/Users/Etienne.Herlaut/.pyenv/versions/3.8.13/lib/python3.8/site-packages/sqlalchemy/engine/url.py", line 656, in _get_entrypoint
    cls = registry.load(name)
  File "/Users/Etienne.Herlaut/.pyenv/versions/3.8.13/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py", line 341, in load
    return impl.load()
  File "/Users/Etienne.Herlaut/.pyenv/versions/3.8.13/lib/python3.8/site-packages/importlib_metadata/__init__.py", line 207, in load
    module = import_module(match.group('module'))
  File "/Users/Etienne.Herlaut/.pyenv/versions/3.8.13/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
    
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
    
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
    
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
    
  File "<frozen importlib._bootstrap_external>", line 843, in exec_module
    
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
    
  File "/Users/Etienne.Herlaut/.pyenv/versions/3.8.13/lib/python3.8/site-packages/snowflake/sqlalchemy/__init__.py", line 63, in <module>
    from .util import _url as URL
  File "/Users/Etienne.Herlaut/.pyenv/versions/3.8.13/lib/python3.8/site-packages/snowflake/sqlalchemy/util.py", line 8, in <module>
    from sqlalchemy.engine.url import _rfc_1738_quote
ImportError: cannot import name '_rfc_1738_quote' from 'sqlalchemy.engine.url' (/Users/Etienne.Herlaut/.pyenv/versions/3.8.13/lib/python3.8/site-packages/sqlalchemy/engine/url.py)
解决方案

这个错误的核心原因是SQLAlchemy与snowflake-sqlalchemy版本不兼容:_rfc_1738_quote是SQLAlchemy的私有内部函数,在新版本SQLAlchemy中被移除/改名,但旧版snowflake-sqlalchemy仍依赖该函数。

解决步骤:

  • 固定兼容版本组合
    参考官方版本兼容规则选择匹配的版本:

    • 若用SQLAlchemy 2.0+,需搭配snowflake-sqlalchemy 1.4.0及以上版本
    • 若用SQLAlchemy 1.x,对应snowflake-sqlalchemy 1.3.x及以下版本
  • 重新安装指定版本
    先卸载冲突包,再安装兼容组合:

    # 卸载现有包
    pip uninstall snowflake-sqlalchemy sqlalchemy -y
    # 示例:安装适配Python3.8的兼容版本
    pip install snowflake-sqlalchemy==1.4.5 sqlalchemy==2.0.19
    
  • 确认虚拟环境
    确保操作的是目标虚拟环境(如你当前使用的pyenv 3.8.13环境),避免全局包冲突。

  • 验证修复
    安装完成后运行测试代码:

    from sqlalchemy import create_engine
    # 替换为你的实际连接参数
    engine = create_engine('snowflake://user:password@account?warehouse=wh&role=role')
    with engine.connect() as conn:
        result = conn.execute('SELECT CURRENT_VERSION()')
        print(result.fetchone())
    

内容的提问来源于stack exchange,提问作者Etienne Herlaut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 08:00:59