Как присоединиться к той же таблице в sqlalchemy

Я пытаюсь присоединиться к той же таблице в sqlalchemy. Это минимальная версия того, что я пробовал:

#!/usr/bin/env python import sqlalchemy as sa from sqlalchemy import create_engine from sqlalchemy.orm import mapper, sessionmaker, aliased engine = create_engine('sqlite:///:memory:', echo=True) metadata = sa.MetaData() device_table = sa.Table("device", metadata, sa.Column("device_id", sa.Integer, primary_key=True), sa.Column("name", sa.String(255), nullable=False), sa.Column("parent_device_id", sa.Integer, sa.ForeignKey('device.device_id')), ) class Device(object): device_id = None def __init__(self, name, parent_device_id=None): self.name = name self.parent_device_id = parent_device_id def __repr__(self): return "<Device(%s, '%s', %s)>" % (self.device_id, self.name, self.parent_device_id ) mapper(Device, device_table) metadata.create_all(engine) db_session = sessionmaker(bind=engine)() parent = Device('parent') db_session.add(parent) db_session.commit() child = Device('child', parent.device_id) db_session.add(child) db_session.commit() ParentDevice = aliased(Device, name='parent_device') q = db_session.query(Device, ParentDevice)\ .outerjoin(ParentDevice, Device.parent_device_id==ParentDevice.device_id) print list(q) 

Это дает мне эту ошибку:

ArgumentError: невозможно определить соединение между 'device' и 'parent_device'; таблицы имеют более одного отношения ограничения внешнего ключа между ними. Пожалуйста, укажите «onclause» этого соединения явно.

Но я указываю onclause для соединения. Как я должен это делать?

2 Solutions collect form web for “Как присоединиться к той же таблице в sqlalchemy”

Для query.[outer]join вы указываете в качестве списка объединений (который отличается от expression.[outer]join .) Поэтому мне нужно было поместить 2 элемента соединения, таблицу и onclause в кортеж, например :

 q = db_session.query(Device, ParentDevice)\ .outerjoin( (ParentDevice, Device.parent_device_id==ParentDevice.device_id) ) 

Ваш сопоставитель должен указать соединение между двумя элементами, вот пример: отношения списка смежности .

  • SqlAlchemy конвертирует UTC DateTime в локальное время перед сохранением
  • Связать объекты в отношениях «многие-ко-многим» в SQLAlchemy
  • Могу ли я использовать pyodbc / freetds и sqlalchemy с десятичными данными в mssql?
  • Работа с дублирующимися первичными ключами при вставке в SQLAlchemy (декларативный стиль)
  • Список таблиц базы данных с SQLAlchemy
  • SQLAlchemy - объект не помечен как истек
  • Как моделировать ограничение `UNIQUE` в SQLAlchemy?
  • Sqlalchemy присоединиться к одному из многих отношений?
  •  
    Interesting Posts for Van-Lav

    Возможно ли выполнить настройку appsrc – ximagesink в Gstreamer

    Ошибка повторной выборки: не может повторно индексировать неидеальный индекс с помощью метода или ограничения

    В Pandas DataFrame, в чем разница между использованием квадратов скобок или точки, чтобы «скопировать столбец»?

    Откажитесь от класса с утомительным __init__

    Проверьте, какие атрибуты краев существуют (NetworkX)

    как нормализовать список списков строк в python?

    как сортировать по вычисленному значению в django

    Как использовать класс TextTestRunner из модуля Unittest Python в режиме failfast?

    переменные python, классы

    python websocket с торнадо. Розетка не закрыта

    Python случайным образом падает до 0% использования ЦП, заставляя код «зависать» при обработке больших массивов numpy?

    Как урезать список?

    NetworkX DiGraph создает подграф (DiGraph) по узлу

    сохранить метод в представлении

    matplotlib.pyplot, сохранить соотношение сторон графика

    Python - лучший язык программирования в мире.