如何将多个表映射到一个模型?

时间:2014-09-04 00:50:55

标签: python flask sqlalchemy flask-sqlalchemy

如果我有两个具有相同列的表,例如一张名为丰田的桌子和一张名为本田的桌子, 如何用烧瓶中的一个模型(可能称为Car)映射这两个表?

2 个答案:

答案 0 :(得分:3)

虽然你可以map multiple tables to a single class,但inheritance可能更好地解决了你所要求的问题。继承有两种主要类型:连接或单个表。由于您的示例说明类型是唯一不同的,所有其他列都相同,single table似乎更合适。

class Car(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    type = db.Column(db.String, nullable=False)
    wheels = db.Column(db.Integer, nullable=False, default=4)

    __mapper_args__ = {
        'polymorphic_on': type,
    }


class TeslaModelS2014(Car):
    __mapper_args__ = {
        'polymorphic_identity': 'Tesla Model S 2014',
    }

这是一个非常人为的例子;继承在这里根本不合适。可以在不制作子类的情况下表示所有汽车。如果您有子类,则必须为每个make / model / year制作一个子类,这很荒谬。

答案 1 :(得分:1)

如果您有两个具有相同列的表,则可能会更好地完成数据库架构。我认为你应该有一个名为CarMake的表,包括丰田,本田等的条目,以及另一个名为Car的表,它有一个CarMake的外键(例如通过名为car_make或类似的字段)。

这样,你可以在Flask中用两个模型来表示这个 - 一个用于Car,一个用于CarMake。