Я столкнулся с ошибкой при запуске приложения Flask. Ошибка возникает, когда я пытаюсь войти в систему, и, похоже, она связана с внешним ключом модели AssignmentReminder, ссылающимся на модель User. Вот отслеживание ошибок:
sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'assignment_reminder.teacher_id' could not find table 'user' with which to generate a foreign key to target column 'id'
Почему SQLAlchemy не может найти таблицу пользователя, хотя имя таблицы соответствует ссылке на внешний ключ? Как устранить эту ошибку?
Дополнительный контекст:
Я использую Flask-Migrate для миграции баз данных. Модель User привязана к основной базе данных, а модель AssignmentReminder ссылается на эту таблицу.
Что я пробовал?
Проверено имя таблицы:
Проверено, что __tablename__ в модели User правильно установлено значение «user» и что внешний ключ в Модель AssignmentReminder ссылается на него как db.ForeignKey('user.id').
База данных Миграции:
выполните следующие команды, чтобы убедиться в актуальности схемы базы данных:
Проверено, что модель User и соответствующая таблица user создаются до AssignmentReminder в базе данных.
Проверенное состояние базы данных:
Использовал браузер базы данных (например, SQLite Browser или pgAdmin), чтобы убедиться, что пользовательская таблица существует и имеет правильную схему.
Попробована явная инициализация:
Добавлен ручной вызов db.create_all() в моем приложении Flask, чтобы убедиться, что все таблицы созданы:
[h4]Описание проблемы:[/h4] Я столкнулся с ошибкой при запуске приложения Flask. Ошибка возникает, когда я пытаюсь войти в систему, и, похоже, она связана с внешним ключом модели AssignmentReminder, ссылающимся на модель User. Вот отслеживание ошибок: [code]sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'assignment_reminder.teacher_id' could not find table 'user' with which to generate a foreign key to target column 'id' [/code] [h4]Соответствующий код:[/h4] Вот используемые модели: [b]Модель пользователя[/b] >: [code]class User(db.Model, UserMixin): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(150), nullable=False, unique=True) email = db.Column(db.String(120), unique=True, nullable=False) password_hash = db.Column(db.String(128), nullable=False) role = db.Column(db.String(20), nullable=False) # e.g., 'student', 'teacher', etc.
# Relationship teacher = db.relationship("User", backref="assignments") [/code] [h4]Моя среда:[/h4] [list] [*]Flask: [Последняя версия Flask] [*] Flask-SQLAlchemy: [Последняя версия] [*]SQLAlchemy: [Последняя версия] [*]Python: [Последняя версия Python] [h4]Мой Вопрос:[/h4] Почему SQLAlchemy не может найти таблицу пользователя, хотя имя таблицы соответствует ссылке на внешний ключ? Как устранить эту ошибку? [h4]Дополнительный контекст:[/h4] Я использую Flask-Migrate для миграции баз данных. Модель User привязана к основной базе данных, а модель AssignmentReminder ссылается на эту таблицу. Что я пробовал? [list] [*][b]Проверено имя таблицы:[/b]
Проверено, что __tablename__ в модели User правильно установлено значение «user» и что внешний ключ в Модель AssignmentReminder ссылается на него как db.ForeignKey('user.id').
[*][b]База данных Миграции:[/b]
выполните следующие команды, чтобы убедиться в актуальности схемы базы данных: [code]flask db init flask db migrate flask db upgrade [/code] Я ожидал, что это создаст все необходимые таблицы ([code]user[/code] и присваивание_reminder) в базе данных.
[*][b]Порядок таблиц:[/b]
Проверено, что модель User и соответствующая таблица user создаются до AssignmentReminder в базе данных.
[*][b]Проверенное состояние базы данных:[/b]
Использовал браузер базы данных (например, SQLite Browser или pgAdmin), чтобы убедиться, что пользовательская таблица существует и имеет правильную схему.
[*] [b]Попробована явная инициализация:[/b]
Добавлен ручной вызов db.create_all() в моем приложении Flask, чтобы убедиться, что все таблицы созданы: [code]with app.app_context(): db.create_all() [/code] Ожидали, что это решит все проблемы с созданием отсутствующих таблиц.
[*]Проверенные связи:< /strong>
Проверено, что столбец Teacher_id в таблице назначения_напоминаний правильно ссылается на user.id.
[/list]
Что Ожидал ли я? Я ожидал, что внешний ключ в модели AssignmentReminder распознает таблицу user в базе данных. В частности:
[*]Ссылка db.ForeignKey('user.id') должна связывать Teacher_id в назначении_reminder с id в таблице user без каких-либо ошибок. [*]Приложение должно работать без проблем без ошибок NoReferencedTableError во время выполнения или входа в систему.