首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLAlchemy NoSuchModuleError:无法加载插件: sqlalchemy.dialects:spanner

SQLAlchemy NoSuchModuleError:无法加载插件: sqlalchemy.dialects:spanner
EN

Stack Overflow用户
提问于 2021-09-07 22:41:32
回答 2查看 627关注 0票数 1

问题

我们正试图通过SQLAlchemy版本1.3.23python-扳手-方形炼金术连接云扳手。使用Poetry进行依赖关系管理时,添加了如下所示的sqlalchemy-spanner (项目是这样设置的):

代码语言:javascript
复制
sqlalchemy = "~1.3"
sqlalchemy-spanner = { git="https://github.com/cloudspannerecosystem/python-spanner-sqlalchemy.git", tag="v0.1.0" }

调用create_engine时,

代码语言:javascript
复制
create_engine("spanner:///projects/my-project/instances/my-instance/databases/my-db")

我得到以下错误

代码语言:javascript
复制
class 'sqlalchemy.exc.NoSuchModuleError'>", "NoSuchModuleError(\"Can't load plugin: sqlalchemy.dialects:spanner\")

尝试

注册表

我尝试过添加(如测试包中的测试文件中所示)

代码语言:javascript
复制
from sqlalchemy.dialects import registry

registry.register("spanner", "google.cloud.sqlalchemy_spanner", "SpannerDialect")

在调用create_engine之前,将导致以下错误:

代码语言:javascript
复制
class 'ModuleNotFoundError'>", "ModuleNotFoundError(\"No module named 'google.cloud.sqlalchemy_spanner'\")

这使我认为插件方言没有被正确添加,因为在setup.py的第49行中,为该方言建立了连接:

代码语言:javascript
复制
entry_points={
    "sqlalchemy.dialects": [
        "spanner = google.cloud.sqlalchemy_spanner:SpannerDialect"
    ]
},

通过python setup.py install安装

在扳手项目的自述文件中,它说要克隆回购并通过python setup.py install安装。我执行了这个步骤,但是不知道如何将它导入到当前项目中,或者让我的项目知道这个库。我以前从未手动安装过python软件包,如果有人能在这里提供任何帮助,我会很感激的。

我试过的是:

  • 按上文所述安装库
  • 尝试通过诗歌:poetry add sqlalchemy-spanner添加依赖项。Got Could not find a matching version of package sqlalchemy-spanner
  • 尝试通过pip:pip install sqlalchemy-spanner==找到库,它通常列出可用的包版本。

我不确定最后两个子弹中的任何一个是否真的检查了一个包的本地安装。甚至不太确定我在说什么。

更新

  • 因此,我可以通过使用python-spanner-sqlalchemy安装本地版本的pip install /path/to/project,这是可行的,但在加载方言时仍然存在相同的问题。
  • 我在上面的代码(在注册表部分)中添加了一个用于SpannerDialectfrom google.cloud.sqlalchemy_spanner import SpannerDialect导入。PyCharm自动完成这为我,这表明我的软件包已成功安装和可用。但是我在运行时收到了ModuleNotFoundError for google.cloud.sqlalchemy_spanner
  • 我在我的项目根目录中运行了python,并且从repl导入了SpannerDialect,没有任何错误。

解决方案

为了澄清,@larkee提供的解决方案与更新的存储库URL有关。

值得注意的是,我们最近将回购系统从cloudspannerecosystem/python-spanner-sqlalchemy转移到了googleapis/。

我在对他们的答复的评论中解释了为什么这样做有效。

我还没有测试@neondot42 42的答案,但我也看到了这个问题,所以如果你有同样的问题,请看一看。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-09 03:00:01

我通过安装sqlalchemy复制了您所看到的错误,但是根本没有安装sqlalchemy-spanner

代码语言:javascript
复制
pip install sqlalchemy==1.3
pip uninstall sqlalchemy-spanner
代码语言:javascript
复制
>>> from sqlalchemy import create_engine
>>> engine = create_engine(<url>)
sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:spanner

安装sqlalchemy-spanner之后,我就可以使用SQLAlchemy了,没有问题:

代码语言:javascript
复制
pip install git+git://github.com/googleapis/python-spanner-sqlalchemy.git@v0.1.0
代码语言:javascript
复制
>>> from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, inspect
>>> engine = create_engine(<url>)
>>> metadata = MetaData(bind=engine)
>>> table = Table(
...     "TestTable",
...     metadata,
...     Column("user_id", Integer, primary_key=True),
...     Column("user_name", String(16), nullable=False),
... )
>>> table.create()
>>> inspect(engine).get_table_names()
['TestTable']
>>>

基于此,我认为问题在于没有安装sqlalchemy-spanner。不幸的是,对于依赖关系管理,我不太熟悉Poetry,所以我不确定到底出了什么问题。值得注意的是,我们最近将回购从cloudspannerecosystem/python-spanner-sqlalchemy转移到googleapis/python-spanner-sqlalchemy。我可以在pip命令中使用这两种方法,但是Poetry可能需要更新的命令吗?

票数 0
EN

Stack Overflow用户

发布于 2022-05-27 13:11:00

抱歉反应太晚了。最近我遇到了一个类似的问题。Sqlalchemy无法装填扳手的方言。我试着用pip卸载和安装不同的版本,但似乎没有什么效果。

最后,诀窍是将数据库URL的“驱动程序”部分指定为“扳手”。最后的URL如下所示:

代码语言:javascript
复制
spanner+spanner:///projects/project-id/instances/instance-id/databases/database-id

我不完全清楚为什么这似乎是我的解决方案,因为我在Google端找到的所有文档都表明,您只能使用“扳手://.”连接起来。另外,我不熟悉sqlalchemy的内部工作原理,以及它应该如何检测其他已安装的方言。不过,我希望这个解决办法可以帮助其他人。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69095208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档