Python 关系上没有ForeignKey错误,即使SQLAlchemy模型指定了外键
在我的flask应用程序中,在两个模型之间建立一对一关系时遇到了一些困难。我有两种型号Python 关系上没有ForeignKey错误,即使SQLAlchemy模型指定了外键,python,flask,sqlalchemy,flask-sqlalchemy,Python,Flask,Sqlalchemy,Flask Sqlalchemy,在我的flask应用程序中,在两个模型之间建立一对一关系时遇到了一些困难。我有两种型号Employee和'Photo'。员工只有一张与其关联的照片,反之亦然 这是我在models.py文件中的代码: class Employee(db.Model): __tablename__ = 'employees' id = db.Column(db.Integer, primary_key=True) photo = db.relationship("Photo", uselis
Employee
和'Photo'。员工只有一张与其关联的照片,反之亦然
这是我在models.py
文件中的代码:
class Employee(db.Model):
__tablename__ = 'employees'
id = db.Column(db.Integer, primary_key=True)
photo = db.relationship("Photo", uselist=False, back_populates='employees')
class Photo(db.Model):
__tablename__ = 'photos'
id = db.Column(db.Integer, primary_key=True)
employee_id = db.Column(db.Integer, db.ForeignKey('employees.id'))
employee = db.relationship('Photo', back_populates='photo')
我按照这里的SQL Alchemy文档中的说明进行了操作。我经常遇到的错误如下所示:
sqlalchemy.exc.NoForeignKeysError: Could not determine join condition between parent/child tables on relationship Photo.employee
- there are no foreign keys linking these tables.
Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify a 'primaryjoin' expression.
我在这里清楚地指定了外键employee\u id=db.Column(db.Integer,db.ForeignKey('employees.id'))
。我不确定我做错了什么。此外,我正在阅读文档,但是uselist、backref和back_populates
如此相似也无济于事
有人能帮我吗?非常感谢您的帮助
backref
自动将反向关系添加到相关模型。您可以将db.backref
对象传递给它,以指定关系的选项back\u填充
告诉SQLAlchemy填充现有的反向关系,而不是创建它<对于无法自动确定关系是否为列表的情况,code>uselist告诉SQLAlchemy关系是否为列表
在您的示例中,您需要一个关系,其中一个backref是单个项
您的代码中有两个输入错误。首先,back\u populates='employees'
应该引用'employees'
,这就是您在相关模型上所称的属性。其次,employee=relationship('Photo')
指向错误的模型,它应该与employee
相关
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)
db.engine.echo = True
class Photo(db.Model):
id = db.Column(db.Integer, primary_key=True)
class Employee(db.Model):
id = db.Column(db.Integer, primary_key=True)
photo_id = db.Column(db.ForeignKey(Photo.id))
photo = db.relationship(Photo, backref=db.backref('employee', uselist=False))
db.create_all()
db.session.add(Employee(photo=Photo()))
db.session.commit()
print(Employee.query.get(1).photo)