首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >flask-sqlalchemy外键错误

flask-sqlalchemy外键错误
EN

Stack Overflow用户
提问于 2021-02-09 19:24:14
回答 1查看 74关注 0票数 0

我试图在flask-sqlalchemy中的一个表中实现外键,但一直收到这个错误:

代码语言:javascript
复制
    "specify a 'primaryjoin' expression." % self.prop
sqlalchemy.exc.NoForeignKeysError: Could not determine join condition between parent/child tables on rel                 ationship workout_plan_task.user_profiles - there are no foreign keys linking these tables.  Ensure that                  referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify a 'primaryjoin                 ' expression.

我有一个“练习”表,还有一个"user_profiles“表。我有两个主键都是"workout_plan_task“表中的外键。

代码如下:

代码语言:javascript
复制
from flask_config import *
from datetime import datetime
from sqlalchemy.orm import relationship

class user_profiles(db.Model):
    __tablename__ = "user_profiles"

    user_ID = db.Column(db.Integer(), primary_key=True, autoincrement=True)
    email_adress = db.Column(db.String())
    age = db.Column(db.Integer())
    sex = db.Column(db.Integer())
    height = db.Column(db.Integer())
    weight = db.Column(db.Integer())
    main_goal = db.Column(db.Integer())
    level_experience = db.Column(db.Integer())
    profile_created_at = db.Column(db.DateTime(), default=datetime.utcnow())


    def __init__(self, email_adress, age, sex, height, weight, main_goal, level_experience, profile_created_at):
        self.email_adress = email_adress
        self.age = age
        self.sex = sex
        self.height = height
        self.weight = weight
        self.main_goal = main_goal
        self.level_experience = level_experience
        self.profile_created_at = profile_created_at

    def __repr__(self):
        return '{}-{}-{}-{}'.format(self.email_adress, self.age, self.sex, self.height, self.weight, self.main_goal, self.level_experience, self.profile_created_at)


class workout_plan_task(db.Model):
    __tablename__ = "workout_plan_task"

    task_ID = db.Column(db.Integer(), primary_key=True)
    user_ID = db.Column(db.Integer, db.ForeignKey('user_ID'), nullable=False, column_hide_backrefs = False)
    workout_plan_ID = db.Column(db.Integer())
    exercise_ID = db.Column(db.Integer, db.ForeignKey('exercise_ID'), nullable=False, column_hide_backrefs = False)
    repetitions = db.Column(db.Integer())
    sets = db.Column(db.Integer())
    pause_time = db.Column(db.Integer())
    day_to_perform_the_task = db.Column(db.String())

    the_user =  relationship("user_profiles", back_populates="workout_plan_task")

    def __init__(self, task_ID, user_ID, workout_plan_ID, exercise_ID, repetitions, sets, pause_time, day_to_perform_the_task):
        self.task_ID = task_ID
        self.user_ID = user_ID
        self.workout_plan_ID = workout_plan_ID
        self.exercise_ID = exercise_ID
        self.repetitions = repetitions
        self.sets = sets
        self.pause_time = pause_time
        self.day_to_perform_the_task = day_to_perform_the_task

    def __repr__(self):
        return '{}-{}-{}-{}-{}-{}-{}-{}'.format(self.task_ID, self.user_ID, self.workout_plan_ID, self.exercise_ID, self.repetitions, self.sets, self.pause_time, self.day_to_perform_the_task)



class exercises(db.Model):
    __tablename__ = "exercises"

    exercise_ID = db.Column(db.Integer(), primary_key=True)
    exercise_name  = db.Column(db.String())
    exercise_type = db.String(db.String())
    muscle_groups_worked_out = db.String(db.String())
    equipment_ID = db.String(db.Integer())



    def __init__(self, exercise_ID, exercise_name, exercise_type, muscle_groups_worked_out, equipment_ID):
        self.exercise_ID = exercise_ID
        self.exercise_name = exercise_name
        self.exercise_type = exercise_type
        self.muscle_groups_worked_out = muscle_groups_worked_out
        self.equipment_ID = equipment_ID

    def __repr__(self):
        return '{}-{}-{}-{}-{}'.format(self.exercise_ID, self.exercise_name, self.exercise_type, self.muscle_groups_worked_out, self.equipment_ID)

有没有人能帮帮我?

EN

回答 1

Stack Overflow用户

发布于 2021-02-10 01:29:21

workout_plan_task模型中,您应该将其他表称为user_profiles.user_ID,而不仅仅是user_IDexercises.exercise_ID,而不仅仅是exercise_ID

因此,更新这些行:

代码语言:javascript
复制
user_ID = db.Column(db.Integer, db.ForeignKey('user_profiles.user_ID'), nullable=False, column_hide_backrefs = False)
exercise_ID = db.Column(db.Integer, db.ForeignKey('exercises.exercise_ID'), nullable=False, column_hide_backrefs = False)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66118063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档