Синтаксис SQLAlchemy / Elixir для отношений в существующих базах данных - PullRequest
1 голос
/ 16 марта 2012

Я пытаюсь построить модели Python, используя Elixir, представляющий таблицы в существующей базе данных MySQL, подключенной через строку соединения mysql+pyodbc. Эликсир без труда отражает структуру столбца, но, похоже, не в состоянии отразить отношения, поэтому сейчас я пытаюсь определить их. У меня был зверь времени с синтаксисом, как декларативной, так и DSL-форм.

Например, у меня есть отношение внешнего ключа к двум таблицам (один к одному), созданным с помощью следующих операторов SQL:

ALTER TABLE db.person
    ADD CONSTRAINT fk_person_id_ref_person_program_id
    FOREIGN KEY (person_id) REFERENCES db.person_program(person_id);

ALTER TABLE db.person_program
    ADD CONSTRAINT fk_person_program_id_ref_person_id
    FOREIGN KEY (person_id) REFERENCES db.person(person_id);

В обеих таблицах person_id является первичным ключом. После прочтения документации (которая, к сожалению, в основном сосредоточена на автоматически создаваемых базах данных, а не на подключении к существующим), я чувствую, что, возможно, проблема в именах / индексах ограничений.

Я пытаюсь использовать отношения OneToOne или has_one для моделирования первого ограничения и отношения ManyToOne или belongs_to для второго. В каждом случае, когда я пытался, я получал ошибки, в том числе инструкции по использованию аргумента ключевого слова primaryjoin, но это тоже не помогло.

Соответственно, у меня похожая ситуация с отношением OneToMany или has_many, определенным в базе данных со следующим кодом SQL:

ALTER TABLE db.person_by_age
    ADD CONSTRAINT fk_person_by_age_id_ref_person_id
    FOREIGN KEY (person_id) REFERENCES db.person(person_id);

Здесь person_id - это первичный ключ таблицы person, но не таблицы person_by_age. Это ограничение дает ошибки в эликсире, аналогичные описанным выше.

Кто-нибудь делал это раньше? Как я могу указать эти отношения, чтобы использовать существующие ограничения внешнего ключа и индексы, уже находящиеся в базе данных?

Любая помощь приветствуется!

...