Атрибут Причины множественного объединения Ошибка SQLAlchemy - PullRequest
1 голос
/ 17 июня 2019

У меня возникли проблемы при обновлении 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'

Любая помощь?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...