Я пытаюсь построить модели 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
. Это ограничение дает ошибки в эликсире, аналогичные описанным выше.
Кто-нибудь делал это раньше? Как я могу указать эти отношения, чтобы использовать существующие ограничения внешнего ключа и индексы, уже находящиеся в базе данных?
Любая помощь приветствуется!