Flask SqlAlchemy加入两个没有外键MYSQL的模型

时间:2015-06-11 21:23:05

标签: python mysql flask-sqlalchemy

我正在加入两个没有外键的模型:

型号:

Graphics.DrawCurve

查看:

class Users(db.Model):
    __tablename__ = "Users"
    userName = db.Column(db.String, primary_key=True)
    lastLogin = db.Column(db.DateTime)

class TimeOff
    __tablename__ = "timeOff"
    timeOffID = db.Column(db.Integer, primary_key=True)
    userName = db.Column("userName", db.String,   db.ForeignKey('appUsers.userName')),
    dayWork = db.Column(db.DateTime)
  

sqlalchemy.exc.InvalidRequestError:找不到要加入的FROM子句。    尝试加入但得到:在TimeOff'之间找不到任何外键关系。和'用户'。

我没有在表

中定义的外键

4 个答案:

答案 0 :(得分:8)

您需要告诉SQLAlchemy如何加入表。尝试这样的事情:

result = db.session.query(Users).join(TimeOff,Users.userName==TimeOff.userName)

答案 1 :(得分:1)

要改善@Matt Healy的回答,如果您还希望能够访问连接对象上的属性,则可以执行以下操作:

user, timeOff = db.session.query(Users, TimeOff).join(
    TimeOff, Users.userName == TimeOff.userName
).first()

然后timeOff.dayWork等将提供您所需的信息。

答案 2 :(得分:0)

这是一篇旧文章,但我遇到了类似的问题

result = session.query(models.Users).join(models.TimeOff, models.Users.userName == models.TimeOff.userName).all()

使用这种方法,我可以达到第一个对象的功能,即用户,而不是TimeOff。我想知道是否有可能达到次要对象的属性。但我希望这会有所帮助。

答案 3 :(得分:0)

这对我有用, 我有 3 个表,我有所有三个表都唯一的 rtf_id,你必须使用 select_from 关键字来告诉表从左开始。

db_data = dbobj.session.query(A, B, C). \
select_from(A).join(B, B.rtf_id == A.rtf_id). \
join(C, C.rtf_id == A.rtf_id).all()