Python 关系上没有ForeignKey错误,即使SQLAlchemy模型指定了外键

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

在我的flask应用程序中,在两个模型之间建立一对一关系时遇到了一些困难。我有两种型号
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)