Почему SQLAlchemy добавляет несколько ограничений для одного внешнего ключа - PullRequest
0 голосов
/ 04 ноября 2019

В проекте Flask у меня есть миграция БД и после запуска сценария обновления для обновления таблиц. Результат после обновления дает мне дубликаты внешних ключей:

    projectsreal | CREATE TABLE `projectsreal` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `projid` int(11) NOT NULL,
  `memberprj` int(11) DEFAULT NULL,
  `contrib` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `IS_ProjectsReal` (`projid`,`memberprj`),
  **KEY `memberprj` (`memberprj`),
  CONSTRAINT `projectsreal_ibfk_1` FOREIGN KEY (`projid`) REFERENCES `projects` (`projid`) ON DELETE CASCADE,
  CONSTRAINT `projectsreal_ibfk_10` FOREIGN KEY (`memberprj`) REFERENCES `users` (`id`),
  CONSTRAINT `projectsreal_ibfk_11` FOREIGN KEY (`projid`) REFERENCES `projects` (`projid`) ON DELETE CASCADE,
  CONSTRAINT `projectsreal_ibfk_12` FOREIGN KEY (`memberprj`) REFERENCES `users` (`id`)**,...

Редакция скрипта, предоставленная Alembic, следующая:

    # revision identifiers, used by Alembic.
revision = '5117277c7aa5'
down_revision = '9a67f348194a'

from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import mysql

def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    #op.add_column('projectsreal', sa.Column('memberprj', sa.INTEGER(), nullable=True))
    op.create_foreign_key(None, 'projectsreal', 'projects', ['projid'], ['projid'], ondelete='CASCADE')
    op.create_foreign_key(None, 'projectsreal', 'users', ['memberprj'], ['id'])
    op.execute("""CREATE UNIQUE INDEX IS_TaxonomyNameLow ON taxonomy (lower(display_name))""")

Это из-за неназванного ForeignKey в op.create_foreign_key(None, 'projectspriv', 'projects', ['projid'], ['projid'], ondelete='CASCADE') ?

...