【问题标题】:Joining two tables with one table having a different foreign key连接两个表,其中一个表具有不同的外键
【发布时间】:2015-02-13 16:55:42
【问题描述】:

我正在尝试将两个表连接在一起,但是,我不断收到以下错误:

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

sqlalchemy.exc.NoForeignKeysError: 找不到 'recipe' 和 'ingredient' 之间的任何外键关系。

class Recipe(db.Model):
    query_class = RecipeQuery
    __tablename__ = 'recipe'

    id = db.Column(db.Integer, primary_key=True)

    name = db.Column(db.Text)
    description = db.Column(db.Text)
    directions = db.Column(db.Text)
    prep_time = db.Column(db.String(15))
    cook_time = db.Column(db.String(15))
    image = db.Column(db.Text)
    ingredients = db.relationship('Ingredient', secondary=ingredients)
    credit = db.Column(db.String)

    search_vector = db.Column(TSVectorType('name', 'description', 'directions'))

class Ingredient(db.Model):
    query_class = IngredientQuery
    __tablename__ = 'ingredient'

    id = db.Column(db.Integer, primary_key=True)
    original = db.Column(db.Text)
    name = db.Column(db.Integer, db.ForeignKey('ingredient_name.id'))
    amount = db.Column(db.String(10))
    unit = db.Column(db.String(20))
    modifiers = db.Column(db.Text)

    search_vector = db.Column(TSVectorType('original'))

ingredients = db.Table('ingredients',
    db.Column('recipe', db.Integer, db.ForeignKey('recipe.id')),
    db.Column('ingredient', db.Integer, db.ForeignKey('ingredient.id'))
    )

我尝试了三种不同的方式选择项目,都失败并出现相同的错误。

try1 = db.session.query(models.Recipe).join(models.Ingredient, secondary=ingredients)
try2 = db.session.query(models.Recipe).join(models.Ingredient)
try3 = db.session.query(models.Recipe).join('ingredients')

它看起来类似于http://docs.sqlalchemy.org/en/rel_0_9/orm/relationships.html 给出的多对多关系示例,唯一真正的区别是成分有一个外键,这可能会被丢弃?如果是这样,我仍然不确定如何解决这个问题。

谢谢

【问题讨论】:

    标签: python flask sqlalchemy


    【解决方案1】:

    如果您在联接中明确指定关系,其中一项是否有效?

    db.session.query(models.Recipe).\
        join(models.Ingredient, models.Recipe.ingredients)
    
    db.session.query(models.Recipe).\
        join(models.Recipe.ingredients)
    

    【讨论】:

      猜你喜欢
      • 2020-11-26
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 2019-12-23
      • 2015-08-03
      • 1970-01-01
      • 2022-08-20
      • 1970-01-01
      相关资源
      最近更新 更多