Проблема, когда я создаю отношения на одной таблице и получаю два столбца из этой таблицы - PullRequest
0 голосов
/ 04 июля 2019

Я новичок в колбе и веб-разработке.Я создаю несколько таблиц для практики, и это проблема:

  • Я создал две таблицы student и subject
  • Теперь, когда я добавляю связь между ними и доступом student.id по внешнему ключу это нормально, но когда я пытаюсь получить доступ к student.result, который является целочисленным, он выдает мне ошибку ниже, это мой код модели БД.
class Students(db.Model):
    __tablename__ = 'students'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80))
    result = db.Column(db.Integer)
    admins = db.relationship("Subjects", lazy="dynamic")


class Subjects(db.Model):
    __tablename__ = 'subjects'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80))
    student = db.relationship("Student", lazy="dynamic")
    student_id = db.Column(db.Integer, db.ForeignKey("students.id"))
    student_result = db.Column(db.Integer, db.ForeignKey("students.result"))

Ошибка добавления записи:

foreign key mismatch - "subjects" referencing "students" (INSERT INTO `subjects`(`id`,`name`,`student_id`,`student_result`) VALUES (1,NULL,NULL,NULL);)

1 Ответ

0 голосов
/ 08 июля 2019

Спасибо, что спросили об этой другой детали.Я думаю, что проблема здесь в том, что ваши отношения student_result на самом деле не являются внешним ключом.

Хотя ваш внешний ключ не обязательно должен ссылаться на первичный ключ, он действительно долженссылка уникальный столбец .Первичные ключи гарантированно будут уникальными.В вашей структуре классов вы должны получить student result, присоединив таблицы к внешнему ключу student_id.Вы вообще не должны иметь отношения student_result.

    results = db.session.query(Students, Subjects) \
               .join(Students, Students.id == Subjects.student_id) \
               .all()

Кстати, действительно сложно вводить имена классов во множественном числе.Я бы порекомендовал делать акцент на студентах и ​​предметах(Тем не менее, имеет смысл использовать имя таблицы во множественном числе.)

...