1005 (HY000): невозможно создать таблицу - PullRequest
0 голосов
/ 22 декабря 2019

Я хочу связать две таблицы в моей базе данных. Я использую sqlalchemy и mariadb для этого проекта.

Хорошо работает, когда для описания столбца в описании таблицы задано значение String со значением до 700.

class Edition(Base):
    __tablename__= "edition"

    idEdition = Column(Integer, primary_key=True)
    description = relationship("Description", back_populates="edition")

class Description(Base):
    __tablename__ = "description"

    idDescription = Column(Integer, primary_key=True)
    edition_id = Column(Integer, ForeignKey('edition.idEdition'), nullable=False)
    description = Column(String(700), nullable=False)
    edition = relationship("Edition", back_populates="description")
    UniqueConstraint(edition_id, description)

Но мне нужно хранить дольшеописания. Если я пытаюсь description = Column(String(800), nullable=False), возникает ошибка:

sqlalchemy.exc.DatabaseError: (mysql.connector.errors.DatabaseError) 1005 (HY000): Can't create table `bestsellers`.`description` (errno: 150 "Foreign key constraint is incorrectly formed")

То же самое с description = Column(LONGTEXT, nullable=False)

Я предполагаю, что есть проблема с типами, но на данный момент я не могунайти где ...

РЕДАКТИРОВАТЬ Следуя предложению Горда Томпсона, я изменяю класс Description:

class Description(Base):
    __tablename__ = "description"

    idDescription = Column(Integer, primary_key=True)
    edition_id = Column(Integer, ForeignKey('edition.idEdition'), nullable=False)
    description = Column(LONGTEXT, nullable=False)
    description_short = Column(String(750), nullable=False)
    edition = relationship("Edition", back_populates="description")
    UniqueConstraint(edition_id, description_short)

, и, похоже, он работает. Тем не менее, мне интересно, может ли mysql:

CREATE TABLE description (idDescription INTEGER NOT NULL AUTO_INCREMENT,

edition_id INTEGER NOT NULL, description LONGTEXT NOT NULL, PRIMARY KEY 

(`idDescription`), UNIQUE (edition_id, description(750)), FOREIGN KEY(edition_id) 

REFERENCES edition (`idEdition`));

быть напрямую переведен на python sqlalchemy? Я бы предпочел не добавлять новый столбец. Было бы здорово просто ограничить существующий столбец с целью UniqueConstraint.

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