Как написать запрос в SQLAlchemy с таблицей, ссылающейся на себя? - PullRequest
1 голос
/ 13 марта 2019

У меня есть собственная таблица ссылок, которая выглядит следующим образом:

class Domain(Base):
    __tablename__ = "domains"
    domain_id = Column(Integer(), primary_key=True)
    parent_id = Column(Integer(), ForeignKey('domains.domain_id'))
    domain_name = Column(String(255), unique=True)

Пример данных:

domain_id, parent_id, domain_name

1,,google.com
2,,yahoo.com
3,1,images.google.com
4,1,drive.google.com
5,2,mail.yahoo.com

Мне нужнонаписать запрос, в котором все домены будут размещены сразу после родительского домена.

1,,google.com
3,1,images.google.com
4,1,drive.google.com
2,,yahoo.com
5,2,mail.yahoo.com

Моя лучшая попытка:

subdomain = aliased(Domain, name='subdomain')

domains = session.query(Domain, subdomain.domain_name)
domains = domains.outerjoin(subdomain, Domain.parent_id==subdomain.domain_id).filter_by(domain_name=None)

subdomains = session.query(Domain, subdomain.domain_name)
subdomains = subdomains.join(subdomain, Domain.domain_id==subdomain.parent_id)

query = domains.union(subdomains)

Но результат не совсем тот, который яищем.

1,,google.com
1,3,images.google.com
1,4,drive.google.com
2,,yahoo.com
2,5,mail.yahoo.com

domain_id и parent_id меняются местами.

...