Flask SQLAlchemy外键关系

时间:2017-01-10 12:46:43

标签: python sqlalchemy

我在SQLAlchemy中解决外键和关系时遇到了很多麻烦。我的数据库中有两个表。第一个是Request,第二个是Agent。每个Request包含一个Agent,每个Agent只有一个Request

class Request(db.Model):
    __tablename__ = 'request'
    reference = db.Column(db.String(10), primary_key=True)
    applicationdate = db.Column(db.DateTime)
    agent = db.ForeignKey('request.agent'),

class Agent(db.Model):
    __tablename__ = 'agent'
    id =     db.relationship('Agent', backref='request', \
    lazy='select')
    name = db.Column(db.String(80))
    company = db.Column(db.String(80))
    address = db.Column(db.String(180))

当我正在运行db.create_all()时,我收到以下错误

  

无法在表'applicant'上初始化ForeignKey'request.agent'的目标列:table'request'没有名为'agent'的列

1 个答案:

答案 0 :(得分:13)

查看SqlAlchemy documentation on OneToOne relationships。首先,您需要为每个模型提供主键。然后,您需要定义一个引用另一个模型的主键的外键。现在,您可以使用backref定义关系,以允许直接访问相关模型。

class Request(db.Model):
    __tablename__ = 'request'
    id = db.Column(db.Integer, primary_key=True)
    applicationdate = db.Column(db.DateTime)

class Agent(db.Model):
    __tablename__ = 'agent'
    id = db.Column(db.Integer, primary_key=True)   
    request_id = Column(Integer, ForeignKey('request.id'))
    request = relationship("Request", backref=backref("request", uselist=False))

    name = db.Column(db.String(80))
    company = db.Column(db.String(80))
    address = db.Column(db.String(180))

现在您可以像这样访问您的模型:

request = Request.query.first()
print(request.agent.name)

agent = Agent.query.first()
print(agent.request.applicationdate)