Alembic sqlalchemy.exc.NoReferencedColumnError: (Использование Flask-sqlalchemy и Flask-Migrate) - PullRequest
0 голосов
/ 19 февраля 2019

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

sqlalchemy.exc.NoReferencedColumnError: Could not initialize target column for ForeignKey 'dataset.datasetid' on table 'analysis': table 'dataset' has no column named 'datasetid'

Вот часть моего models.pyкласс

class Dataset(db.Model):
    DatasetID = db.Column(db.Integer, primary_key = True)
    SampleID = db.Column(db.String(50), db.ForeignKey('sample.SampleID', onupdate="cascade",ondelete="restrict"), nullable=False)
    UploadDate = db.Column(db.Date, nullable=False)
    UploadID = db.Column(db.Integer,db.ForeignKey('uploaders.UploadID', onupdate="cascade",ondelete="restrict"), nullable=False)
    UploadStatus = db.Column(db.String(45), nullable=False)
    HPFPath = db.Column(db.String(500))
    DatasetType = db.Column(db.String(45), nullable=False)
    SolvedStatus = db.Column(db.String(30), nullable=False)
    InputFile = db.Column(db.Text)
    RunID = db.Column(db.String(45))
    Notes = db.Column(db.Text)
    analyses = db.relationship('Analysis',backref='dataset',lazy='dynamic')
    data2Cohorts = db.relationship('Dataset2Cohort',backref='dataset',lazy='dynamic')

class Dataset2Cohort(db.Model):
    __tablename__='dataset2Cohort'
    DatasetID = db.Column(db.Integer, db.ForeignKey('dataset.DatasetID', onupdate="cascade",ondelete="cascade"), nullable=False, primary_key = True)
    CohortID = db.Column(db.Integer, db.ForeignKey('cohort.CohortID', onupdate="cascade", ondelete="restrict"),  nullable=False, primary_key = True)

class Analysis(db.Model):
    AnalysisID = db.Column(db.String(100), primary_key = True)
    DatasetID = db.Column(db.Integer, db.ForeignKey('dataset.DatasetID', onupdate="cascade",ondelete="cascade"), nullable=False)
    PipelineVersion = db.Column(db.String(30))
    ResultsDirectory = db.Column(db.Text)
    ResultsBAM = db.Column(db.Text)
    AssignedTo = db.Column(db.String(100), nullable=True)
    analysisStatuses = db.relationship('AnalysisStatus', backref='analysis', lazy='dynamic')

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

Спасибо, Teja.

1 Ответ

0 голосов
/ 20 февраля 2019

Нашли решение.

Похоже, это проблема с тем, как версии Mysql 8.x ссылаются на имена столбцов в объявлении внешнего ключа - версии Mysql 8.x всегда используют строчные буквы, когда на столбец ссылаются вОператоры внешнего ключа, которые приводят к несовместимости с sqlalchemy.Эта проблема обсуждается здесь

https://github.com/sqlalchemy/sqlalchemy/issues/4344

Решение состоит в том, чтобы просто обновить sqlalchemy до последней версии (> = 1.2.x)

Teja.

...