[英]flask-sqlalchemy foreignkey errors
我試圖在我的flask-sqlalchemy中的一個表上實現外鍵,但一直收到這個錯誤:
"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”表中的外鍵。
這是代碼:
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)
有人可以幫助我嗎?
在鍛煉計划workout_plan_task
中,您應該將其他表稱為user_profiles.user_ID
而不僅僅是user_ID
和exercises.exercise_ID
而不僅僅是exercise_ID
ID
所以更新這些行:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.