SQLAlchemy连接Cloud Spanner报NoSuchModuleError问题排查与解决
SQLAlchemy连接Cloud Spanner方言加载失败问题解决记录
环境与初始配置
使用SQLAlchemy 1.3.23版本和python-spanner-sqlalchemy库连接Cloud Spanner,依赖管理工具为Poetry,初始依赖配置如下:
sqlalchemy = "~1.3" sqlalchemy-spanner = { git="旧版项目仓库地址", tag="v0.1.0" }
调用create_engine的代码:
create_engine("spanner:///projects/my-project/instances/my-instance/databases/my-db")
触发报错:sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:spanner
排查过程
方言注册验证
参考python-spanner-sqlalchemy测试包中的conftest.py文件,在调用create_engine前添加方言注册代码:
from sqlalchemy.dialects import registry registry.register("spanner", "google.cloud.sqlalchemy_spanner", "SpannerDialect")
此时触发新报错:ModuleNotFoundError: No module named 'google.cloud.sqlalchemy_spanner'
经查该库的setup.py文件第49行已正确配置方言对应的入口点:
entry_points={ "sqlalchemy.dialects": [ "spanner = google.cloud.sqlalchemy_spanner:SpannerDialect" ] },
手动安装验证
按照该Spanner项目README指引,克隆仓库后执行python setup.py install安装,尝试让项目识别该库时做了如下操作:
- 完成本地库安装
- 执行
poetry add sqlalchemy-spanner添加依赖,报错Could not find a matching version of package sqlalchemy-spanner - 执行
pip install sqlalchemy-spanner==查询可用版本,无返回结果
运行环境验证
- 通过
pip install /path/to/project成功安装本地版python-spanner-sqlalchemy,但仍存在方言加载失败的问题 - 在代码中添加
from google.cloud.sqlalchemy_spanner import SpannerDialect导入语句,PyCharm可自动补全说明包已安装,但运行时仍提示google.cloud.sqlalchemy_spanner模块不存在 - 在项目根目录启动Python REPL,可正常导入SpannerDialect无报错
最终解决方案
将sqlalchemy-spanner依赖的git仓库地址更换为项目迁移后的官方新地址即可解决问题,该项目近期已从cloudspannerecosystem组织迁移至googleapis组织下。
内容的提问来源于stack exchange,提问作者James B
相关产品推荐
相关产品推荐

