Я не могу загрузить Self Reference в SQLAlchemy - PullRequest
0 голосов
/ 08 ноября 2019

У меня в настоящее время проблема с отношением самообращения.

У меня есть таблица Customer, у которой может быть родитель (также Customer), подобный этому:

class CustomerModel(db.Model):
     __tablename__ = 'customer'

     id = Column(Integer, primary_key=True)
     parent_id = Column(Integer, ForeignKey('customer.id'))
     parent = relationship("CustomerModel", foreign_keys=[parent_id])

Так что моя проблема в том, что когда я пытаюсь загрузить родительский объект, SQLAlchemy строит следующий запрос:

Давайте возьмем этого клиента, например: Customer(id=1, parent_id=10)

SELECT *
FROM customer
WHERE 1 = customer.parent_id

Итакусловие WHERE неверно, потому что оно сравнивает parent_id с id клиента, от которого я пытаюсь загрузить родителя.

Правильный запрос должен быть:

SELECT *
FROM customer
WHERE 10 = customer.parent_id

Что я делаю не так?

1 Ответ

0 голосов
/ 08 ноября 2019

Итак, я наконец нашел ответ.

Мне нужно добавить параметр remote_side примерно так:

 class CustomerModel(db.Model):
      __tablename__ = 'customer'

      id = Column(Integer, primary_key=True)
      parent_id = Column(Integer, ForeignKey('customer.id'))
      parent = relationship("CustomerModel", foreign_keys=[parent_id], remote_side=[id]) 
...