问题
我们正试图通过SQLAlchemy版本1.3.23和python-扳手-方形炼金术连接云扳手。使用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\")尝试
注册表
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安装
在扳手项目的自述文件中,它说要克隆回购并通过python setup.py install安装。我执行了这个步骤,但是不知道如何将它导入到当前项目中,或者让我的项目知道这个库。我以前从未手动安装过python软件包,如果有人能在这里提供任何帮助,我会很感激的。
我试过的是:
poetry add sqlalchemy-spanner添加依赖项。Got Could not find a matching version of package sqlalchemy-spannerpip install sqlalchemy-spanner==找到库,它通常列出可用的包版本。我不确定最后两个子弹中的任何一个是否真的检查了一个包的本地安装。甚至不太确定我在说什么。
更新
python-spanner-sqlalchemy安装本地版本的pip install /path/to/project,这是可行的,但在加载方言时仍然存在相同的问题。SpannerDialect的from 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的答案,但我也看到了这个问题,所以如果你有同样的问题,请看一看。
发布于 2021-09-09 03:00:01
我通过安装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可能需要更新的命令吗?
发布于 2022-05-27 13:11:00
抱歉反应太晚了。最近我遇到了一个类似的问题。Sqlalchemy无法装填扳手的方言。我试着用pip卸载和安装不同的版本,但似乎没有什么效果。
最后,诀窍是将数据库URL的“驱动程序”部分指定为“扳手”。最后的URL如下所示:
spanner+spanner:///projects/project-id/instances/instance-id/databases/database-id我不完全清楚为什么这似乎是我的解决方案,因为我在Google端找到的所有文档都表明,您只能使用“扳手://.”连接起来。另外,我不熟悉sqlalchemy的内部工作原理,以及它应该如何检测其他已安装的方言。不过,我希望这个解决办法可以帮助其他人。
https://stackoverflow.com/questions/69095208
复制相似问题