数据库 – 我在SQL炼金术中的关系有什么问题?
发布时间:2020-12-12 16:41:45 所属栏目:MsSql教程 来源:网络整理
导读:我正在使用SQLAlchemy与Flask来创建我的应用程序的关系.我最近重写了关系,无论我改变了什么,我都不断得到错误: sqlalchemy.exc.NoForeignKeysError: Could not determine join condition between parent/child tables on relationship CurriculumVersion.enr
我正在使用SQLAlchemy与Flask来创建我的应用程序的关系.我最近重写了关系,无论我改变了什么,我都不断得到错误:
sqlalchemy.exc.NoForeignKeysError: Could not determine join condition between parent/child tables on relationship CurriculumVersion.enrollments - there are no foreign keys linking these tables. Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint,or specify a 'primaryjoin' expression. 在我的车型上: class User(db.Model,AuthUser): id = db.Column(db.Integer,primary_key=True) tf_login = db.Column(db.String(255),unique=True,nullable=False) # can assume is an email password = db.Column(db.String(120),nullable=False) salt = db.Column(db.String(80)) role = db.Column(db.String(80)) # for later when have different permission types zoho_contactid = db.Column(db.String(20),nullable=False) created_asof = db.Column(db.DateTime,default=datetime.datetime.utcnow) enrollments = db.relationship('Enrollment',backref='enrollment',lazy='dynamic') firstname = db.Column(db.String(80)) lastname = db.Column(db.String(80)) def __repr__(self): return '#%d tf_login: %s,First Name: %s Last Name: %s created_asof %s' % (self.id,self.tf_login,self.firstname,self.lastname,self.created_asof) def __getstate__(self): return { 'id': self.id,'tf_login': self.tf_login,'firstname': self.firstname,'lastname': self.lastname,'role': self.role,'created_asof': self.created_asof,} @classmethod def load_current_user(cls,apply_timeout=True): data = get_current_user_data(apply_timeout) if not data: return None return cls.query.filter(cls.email==data['email']).one() return '#%d Course Name: %s,Course Version: %s,Closing Date: %s' %(self.id,self.course_name,self.course_version,self.closing_date) class Enrollment(db.Model,primary_key=True) user_id = db.Column(db.Integer,db.ForeignKey('user.id')) version_id = db.Column(db.Integer,db.ForeignKey('curriculumversion.id')) cohort_id = db.Column(db.Integer,db.ForeignKey('cohort.id')) def __repr__(self): return '#%d User ID: %d Version ID: %d,Cohort ID: %d' %(self.id,self.user_id,self.version_id,self.cohort_id) class Cohort(db.Model,primary_key=True) days_to_completion = db.Column(db.String(20)) course_id = db.Column(db.Integer,db.ForeignKey('course.id')) enrollments = db.relationship('Enrollment',lazy='dynamic') def __repr__(self): return '#%d Days To Completion: %s' %(self.id,self.days_to_completion) class CurriculumVersion(db.Model,primary_key=True) version_number = db.Column(db.String(6)) date_implemented = db.Column(db.DateTime) course_id = db.Column(db.Integer,lazy='dynamic') def __repr__(self): return '#%d Version Number: %s,Date Implemented: %s' %(self.id,self.version_number,self.date_implemented) class Course(db.Model,primary_key=True) course_code = db.Column(db.String(20)) course_name = db.Column(db.String(50)) versions = db.relationship('CurriculumVersion',backref='version',lazy='dynamic') cohorts = db.relationship('Cohort',backref='cohort',lazy='dynamic') def __repr__(self): return '#%d Course Code: %s,Course Name: %s' %(self.id,self.course_code,self.course_name) 任何帮助将不胜感激! 解决方法这个错误:Could not determine join condition between parent/child tables on relationship CurriculumVersion.enrollments 意味着SQLAlchemy在注册中找不到一个适当的列用作关系中的外键. 您定义了外键,但您使用了不正确的表名. Flask-SQLAlchemy在创建表时将CamelCase类转换为camel_case,因此需要更改此值: class Enrollment(db.Model,AuthUser): # ... version_id = db.Column(db.Integer,db.ForeignKey('curriculumversion.id')) #... 到这个: class Enrollment(db.Model,db.ForeignKey('curriculum_version.id')) #... 或者,您可以使用__tablename__属性来覆盖Flask-SQLAlchemy使用的默认命名约定. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容