python - 多重连接导致属性错误 SQLAlchemy
问题描述
我从 1.3.3 升级 1.1.13 的 SQLAlchemy 时遇到了一些麻烦。我有三个表定义如下:
class LAreas(DB.Model):
__tablename__ = "l_areas"
__table_args__ = {"schema": "ref_geo"}
id_area = DB.Column(DB.Integer, primary_key=True)
id_type = DB.Column(DB.Integer, ForeignKey("ref_geo.bib_areas_types.id_type"))
area_name = DB.Column(DB.Unicode)
area_code = DB.Column(DB.Unicode)
geom = DB.Column(Geometry("GEOMETRY", current_app.config["LOCAL_SRID"]))
source = DB.Column(DB.Unicode)
geom = DB.Column(Geometry("GEOMETRY", 4326))
area_type = DB.relationship("BibAreasTypes", lazy="select")
corSiteArea = DB.Table(
"cor_site_area",
DB.MetaData(schema="gn_monitoring"),
DB.Column(
"id_base_site",
DB.Integer,
ForeignKey("gn_monitoring.cor_site_application.id_base_site"),
primary_key=True,
),
DB.Column(
"id_area", DB.Integer, ForeignKey("ref_geo.l_areas.id_area"), primary_key=True
),
)
corSiteModule = DB.Table(
"cor_site_module",
DB.MetaData(schema="gn_monitoring"),
DB.Column(
"id_base_site",
DB.Integer,
ForeignKey("gn_monitoring.cor_site_application.id_base_site"),
primary_key=True,
),
DB.Column(
"id_module",
DB.Integer,
ForeignKey("gn_commons.t_modules.id_module"),
primary_key=True,
),
)
然后,我编写一个带有两个连接的查询,以获取位于站点中的区域和如下所示的模块:
q = (
DB.session.query(LAreas.area_name).distinct()
.outerjoin(corSiteArea, LAreas.id_area == corSiteArea.c.id_area)
.outerjoin(
corSiteModule, corSiteModule.c.id_base_site == corSiteArea.c.id_base_site
)
.filter(corSiteModule.c.id_module == id_module)
)
此查询在 SQLAlchemy 1.1.13 中运行良好,但在最新版本 1.3.3 中运行良好。我有这个错误:
File "/home/theo/workspace/GN2/GeoNature/backend/venv/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 2414, in _join
left, right, onclause, prop, create_aliases, outerjoin, full
File "/home/theo/workspace/GN2/GeoNature/backend/venv/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 2437, in _join_left_to_right
) = self._join_determine_implicit_left_side(left, right, onclause)
File "/home/theo/workspace/GN2/GeoNature/backend/venv/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 2518, in _join_determine_implicit_left_side
self._from_obj, r_info.selectable, onclause
File "/home/theo/workspace/GN2/GeoNature/backend/venv/lib/python3.6/site-packages/sqlalchemy/sql/util.py", line 149, in find_left_clause_to_join_from
elif Join._can_join(f, s) or onclause is not None:
File "/home/theo/workspace/GN2/GeoNature/backend/venv/lib/python3.6/site-packages/sqlalchemy/sql/selectable.py", line 957, in _can_join
consider_as_foreign_keys=consider_as_foreign_keys,
File "/home/theo/workspace/GN2/GeoNature/backend/venv/lib/python3.6/site-packages/sqlalchemy/sql/selectable.py", line 982, in _joincond_scan_left_right
if nrte.table_name == left.name:
AttributeError: '_ORMJoin' object has no attribute 'name'
有什么帮助吗?
谢谢
解决方案
推荐阅读
- reactjs - 反应:按 X 按钮从屏幕上删除图像
- python - 转到目录中唯一的文件夹下
- javascript - 在whatsapp中自动更新消息
- amazon-web-services - 如何在 Amazon Lex 中创建机器人以获取天气更新?
- ios - 是否可以将 Facebook SDK 添加到我的 iOS 小部件扩展中?
- javascript - 为每个拖放块添加工具提示
- sql - 在 SQL Server 2012 中按 7 天窗口对班次数据进行分组
- php - VS Code Intelephense html 中的错误路径补全
- javascript - 我的简单网站是否需要 gatsby-plugin-offline 和/或 gatsby-plugin-manifest?
- ansible - ansible 处理 yaml 块(数组)行值