SQLAlchemy NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:spanner
SQLAlchemy NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:spanner
问题
我们正在尝试通过 SQLAlchemy
版本 1.3.23
和 python-spanner-sqlalchemy 连接到 Cloud Spanner。使用 Poetry
进行依赖管理,sqlalchemy-spanner
已添加如下(项目是这样设置的):
sqlalchemy = "~1.3"
sqlalchemy-spanner = { git="https://github.com/cloudspannerecosystem/python-spanner-sqlalchemy.git", tag="v0.1.0" }
当用
调用 create_engine
时
create_engine("spanner:///projects/my-project/instances/my-instance/databases/my-db")
我收到以下错误
class 'sqlalchemy.exc.NoSuchModuleError'>", "NoSuchModuleError(\"Can't load plugin: sqlalchemy.dialects:spanner\")
尝试次数
注册表
我试过添加(如 conftest.py
file in the python-spanner-sqlalchemy test 包中所示)
from sqlalchemy.dialects import registry
registry.register("spanner", "google.cloud.sqlalchemy_spanner", "SpannerDialect")
在调用 create_engine
之前,会导致以下错误:
class 'ModuleNotFoundError'>", "ModuleNotFoundError(\"No module named 'google.cloud.sqlalchemy_spanner'\")
这让我觉得插件方言没有正确添加,因为在 setup.py
的第 49 行中,建立了方言的连接:
entry_points={
"sqlalchemy.dialects": [
"spanner = google.cloud.sqlalchemy_spanner:SpannerDialect"
]
},
通过 python setup.py install
安装
在 spanner 项目的 README 中,它说要克隆 repo 并通过 python setup.py install
安装。我执行了这一步,但不确定如何将它导入我当前的项目或让我的项目知道这个库。我以前从未手动安装过 python 软件包,所以如果有人可以在这里提供任何帮助,我将不胜感激。
我做过尝试的事情:
- 按照上面的方法安装库
- 尝试通过诗歌添加依赖:
poetry add sqlalchemy-spanner
。得到 Could not find a matching version of package sqlalchemy-spanner
- 尝试通过 pip 定位库:
pip install sqlalchemy-spanner==
通常会列出可用的软件包版本。
我不确定最后两个要点中的任何一个是否真的检查了包的本地安装。甚至不太确定我在说什么。
更新
- 所以我可以使用
pip install /path/to/project
安装本地版本的 python-spanner-sqlalchemy
,这很有效,但在加载方言时仍然遇到同样的问题。
- 我在上面的代码(在注册表部分)中使用
from google.cloud.sqlalchemy_spanner import SpannerDialect
添加了对 SpannerDialect
的导入。 PyCharm 自动为我完成了这个,这表明该软件包已成功安装并可用。但是当 运行. 时,我收到 google.cloud.sqlalchemy_spanner
的 ModuleNotFoundError
- 我 运行
python
在我的项目根目录中,并且从 repl 导入 SpannerDialect
没有错误。
我能够通过安装 sqlalchemy
但根本没有安装 sqlalchemy-spanner
来复制您看到的错误:
pip install sqlalchemy==1.3
pip uninstall sqlalchemy-spanner
>>> from sqlalchemy import create_engine
>>> engine = create_engine(<url>)
sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:spanner
安装后 sqlalchemy-spanner
我可以毫无问题地使用 SQLAlchemy:
pip install git+git://github.com/googleapis/python-spanner-sqlalchemy.git@v0.1.0
>>> 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
需要更新的命令?
抱歉回复晚了。我最近正在努力解决类似的问题。 Sqlalchemy 无法加载扳手方言。我尝试使用 pip 卸载和安装不同的版本,但似乎没有任何效果。
最后的诀窍是将数据库 URL 的“驱动程序”部分也指定为“spanner”。所以最后的 URL 看起来像这样:
spanner+spanner:///projects/project-id/instances/instance-id/databases/database-id
我不完全确定为什么这似乎是我的解决方案,因为我在 Google 末尾找到的所有文档都表明您只能使用“spanner:// /...“ 连接。此外,我不熟悉 sqlalchemy 的内部工作原理以及它应该如何检测其他已安装的方言。但是,我希望这个解决方案可以帮助其他人。
问题
我们正在尝试通过 SQLAlchemy
版本 1.3.23
和 python-spanner-sqlalchemy 连接到 Cloud Spanner。使用 Poetry
进行依赖管理,sqlalchemy-spanner
已添加如下(项目是这样设置的):
sqlalchemy = "~1.3"
sqlalchemy-spanner = { git="https://github.com/cloudspannerecosystem/python-spanner-sqlalchemy.git", tag="v0.1.0" }
当用
调用create_engine
时
create_engine("spanner:///projects/my-project/instances/my-instance/databases/my-db")
我收到以下错误
class 'sqlalchemy.exc.NoSuchModuleError'>", "NoSuchModuleError(\"Can't load plugin: sqlalchemy.dialects:spanner\")
尝试次数
注册表
我试过添加(如 conftest.py
file in the python-spanner-sqlalchemy test 包中所示)
from sqlalchemy.dialects import registry
registry.register("spanner", "google.cloud.sqlalchemy_spanner", "SpannerDialect")
在调用 create_engine
之前,会导致以下错误:
class 'ModuleNotFoundError'>", "ModuleNotFoundError(\"No module named 'google.cloud.sqlalchemy_spanner'\")
这让我觉得插件方言没有正确添加,因为在 setup.py
的第 49 行中,建立了方言的连接:
entry_points={
"sqlalchemy.dialects": [
"spanner = google.cloud.sqlalchemy_spanner:SpannerDialect"
]
},
通过 python setup.py install
安装
在 spanner 项目的 README 中,它说要克隆 repo 并通过 python setup.py install
安装。我执行了这一步,但不确定如何将它导入我当前的项目或让我的项目知道这个库。我以前从未手动安装过 python 软件包,所以如果有人可以在这里提供任何帮助,我将不胜感激。
我做过尝试的事情:
- 按照上面的方法安装库
- 尝试通过诗歌添加依赖:
poetry add sqlalchemy-spanner
。得到Could not find a matching version of package sqlalchemy-spanner
- 尝试通过 pip 定位库:
pip install sqlalchemy-spanner==
通常会列出可用的软件包版本。
我不确定最后两个要点中的任何一个是否真的检查了包的本地安装。甚至不太确定我在说什么。
更新
- 所以我可以使用
pip install /path/to/project
安装本地版本的python-spanner-sqlalchemy
,这很有效,但在加载方言时仍然遇到同样的问题。 - 我在上面的代码(在注册表部分)中使用
from google.cloud.sqlalchemy_spanner import SpannerDialect
添加了对SpannerDialect
的导入。 PyCharm 自动为我完成了这个,这表明该软件包已成功安装并可用。但是当 运行. 时,我收到 - 我 运行
python
在我的项目根目录中,并且从 repl 导入SpannerDialect
没有错误。
google.cloud.sqlalchemy_spanner
的 ModuleNotFoundError
我能够通过安装 sqlalchemy
但根本没有安装 sqlalchemy-spanner
来复制您看到的错误:
pip install sqlalchemy==1.3
pip uninstall sqlalchemy-spanner
>>> from sqlalchemy import create_engine
>>> engine = create_engine(<url>)
sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:spanner
安装后 sqlalchemy-spanner
我可以毫无问题地使用 SQLAlchemy:
pip install git+git://github.com/googleapis/python-spanner-sqlalchemy.git@v0.1.0
>>> 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
需要更新的命令?
抱歉回复晚了。我最近正在努力解决类似的问题。 Sqlalchemy 无法加载扳手方言。我尝试使用 pip 卸载和安装不同的版本,但似乎没有任何效果。
最后的诀窍是将数据库 URL 的“驱动程序”部分也指定为“spanner”。所以最后的 URL 看起来像这样:
spanner+spanner:///projects/project-id/instances/instance-id/databases/database-id
我不完全确定为什么这似乎是我的解决方案,因为我在 Google 末尾找到的所有文档都表明您只能使用“spanner:// /...“ 连接。此外,我不熟悉 sqlalchemy 的内部工作原理以及它应该如何检测其他已安装的方言。但是,我希望这个解决方案可以帮助其他人。