创建行时映射器错误

时间:2014-10-02 17:54:44

标签: flask sqlalchemy

我正在建立食谱数据库。在这里,有成分(如洋葱,胡萝卜等)和改良剂(如切丁,去皮等),它们是ModifiedIngredients的一部分,是配方的一部分。我的models.py如下:

from app import db

modifiers = db.Table('modifiers',
    db.Column('modified_ingredient', db.Integer, db.ForeignKey('modified_ingredient.id')),
    db.Column('modifier', db.Integer, db.ForeignKey('modifier.id'))
    )

modified_ingredients = db.Table('modified_ingredients',
    db.Column('recipe', db.Integer, db.ForeignKey('recipe.id')),
    db.Column('modified_ingredient', db.Integer, db.ForeignKey('modified_ingredient.id'))
    )

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

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

    name = db.Column(db.String(256))
    description = db.Column(db.Text)
    directions = db.Column(db.Text)
    prep_time = db.Column(db.Integer)
    cook_time = db.Column(db.Integer)
    image = db.Column(db.LargeBinary())
    ingredients = db.relationship('modified_ingredient', secondary=modified_ingredients)

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

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

    name = db.Column(db.String(30), index=True, unique=True)

class Modifier(db.Model):
    __tablename__ = 'modifier'

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

    name = db.Column(db.String(30), index=True, unique=True)

class ModifiedIngredient(db.Model):
    __tablename__ = 'modified_ingredient'

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

    amount = db.Column(db.Integer)
    unit = db.Column(db.String(20))
    ingredients = db.relationship('ingredient', backref='ingredient', lazy='dynamic')
    modifiers = db.relationship('Modifier', secondary=modifiers,
        backref=db.backref('modifiers', lazy='dynamic'), lazy='dynamic')
    recipe = db.Column(db.Integer, db.ForeignKey('recipe.id'))

但是,如果我打开一个shell并输入类似“onion = models.Ingredient(name='Onion')”的内容,我会收到错误:

sqlalchemy.exc.InvalidRequestError: One or more mappers failed to initialize - can't proceed with initialization of other mappers.  Original exception was: relationship 'ingredients' expects a class or a mapper argument (received: <class 'sqlalchemy.sql.schema.Table'>)

我不确定我的设置出错了。 感谢。

1 个答案:

答案 0 :(得分:2)

如果我正确读取错误消息,那么

ingredients = db.relationship('modified_ingredient', secondary=modified_ingredients)

应该成为

ingredients = db.relationship('ModifiedIngredient', secondary=modified_ingredients)

请注意错误消息:

  

最初的例外是:关系'成分'需要一个类或一个映射器参数(收到:&lt; class'tarlalchemy.sql.schema.Table'&gt;)

如果它需要一个类,请给它一个类:)