我在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))
Run Code Online (Sandbox Code Playgroud)
当我运行时,db.create_all()我收到以下错误
无法在表'applicant'上初始化ForeignKey'request.agent'的目标列:table'request'没有名为'agent'的列
MrL*_*eeh 16
查看有关OneToOne关系的SqlAlchemy文档.首先,您需要为每个模型提供主键.然后,您需要定义一个引用另一个模型的主键的外键.现在,您可以使用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))
Run Code Online (Sandbox Code Playgroud)
现在您可以像这样访问您的模型:
request = Request.query.first()
print(request.agent.name)
agent = Agent.query.first()
print(agent.request.applicationdate)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15204 次 |
| 最近记录: |