Давайте предположим, что следующие две таблицы MySQL:Как создать несколько отношений для нескольких внешних ключей, указывающих на одну и ту же таблицу?
-- -----------------------------------------------------
-- Table `mydb`.`Person`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Person` (
`id` INT NOT NULL ,
`first_name` VARCHAR(45) NOT NULL ,
`last_name` VARCHAR(45) NULL ,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`Parents`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Parents` (
`person_id` INT NOT NULL ,
`mother` INT NOT NULL ,
`father` INT NOT NULL ,
PRIMARY KEY (`person_id`) ,
INDEX `mother_idx` (`mother` ASC) ,
INDEX `father_fk_idx` (`father` ASC) ,
CONSTRAINT `person_fk`
FOREIGN KEY (`person_id`)
REFERENCES `mydb`.`Person` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `mother_fk`
FOREIGN KEY (`mother`)
REFERENCES `mydb`.`Person` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `father_fk`
FOREIGN KEY (`father`)
REFERENCES `mydb`.`Person` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
Есть 3 один-к-многим между двумя таблицами.
Классы модели, которые будут использоваться SQLAlchemy, может быть что-то подобное:
class Person(Base)
id = Column(Integer, primary_key=True)
first_name = Column(String)
last_name = Column(String)
class Parents(Base)
person_id = Column(Integer, ForeignKey('person.id'), primary_key=True)
mother_id = Column(Integer, ForeignKey('person.id'))
father_id = Column(Integer, ForeignKey('person.id'))
И вот три backref
отношения, которые будут добавлены к Parents
таблице:
person = relationship(Person, backref=backref('parents', uselist=True))
mother = relationship(Person, backref=backref('mothers', uselist=True))
father = relationship(Person, backref=backref('fathers', uselist=True))
К сожалению, эти отношения недействительны; нет ошибок при создании таблиц, но следующие появляется при попытке вставить:
sqlalchemy.exc.AmbiguousForeignKeysError: Could not determine join condition between parent/child tables on relationship ...
Будучи очень новым для SQLAlchemy, у меня возникают проблемы с этой ситуацией. Пожалуйста посоветуй.
[Edit 1]
Небольшие исправления в коде.