Соотношение «многие к одному» с SQLAlchemy в одной таблице - PullRequest
5 голосов
/ 13 апреля 2011

У меня есть таблица «Клиенты», где клиент может быть дочерним по отношению к другому клиенту.

Вот определение таблицы.

[ClientID] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](50) NOT NULL,
[VPFSID] [varchar](50) NOT NULL,
[Type] [varchar](25) NULL,
[ROHostID] [varchar](60) NOT NULL,
[RWHostID] [varchar](60) NOT NULL,
[ParentClientID] [int] NULL

В SQLAlchemy как мне создать связь между ParentClientID и ClientID. Я собрал этот класс, используя декларативный, но я не уверен, действителен ли он или нет. Клиент может иметь много детей, но может иметь только одного родителя, поэтому это отношение «многие к 1»

class Client(Base):
    """ Client Filesystems """
    __tablename__ = 'Client'

    client_id = Column('ClientID', int, primary_key=True, nullable=Flase)
    name = Column('name', String(50), nullable=False)
    vpfs_id = Column('VPFSID', String(50), nullable=False)
    type = Column('Type',String(25))
    ro_host_id = Column('ROHostID', String(60), ForeignKey('DataMover.HostID'), nullable=False)
    rw_host_id = Column('RWHostID', String(60), ForeignKey('DataMover.HostID'), nullable=False)
    rw_host = relation('Datamover',backref="rw_clients")
    ro_host = relation('Datamover',backref="ro_clients")
    parent_client_id = Column('ParentClientID',int,ForeignKey('Client.ClientID'))
    parent = relation('Client',ForeignKey('Client.ClientID'))

Любые предложения по выполнению этого?

1 Ответ

9 голосов
/ 19 мая 2011
class Client(Base):
    ...<snip>...
    parent = relation('Client', remote_side=[client_id])

Документы здесь: orm / self_referential.html

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