У меня возникли проблемы при обновлении SQLAlchemy с версии 1.1.13 с версии 1.3.3.
У меня есть три таблицы, определяемые так:
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'
Любая помощь?
Спасибо