使用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
相关产品推荐
相关产品推荐

