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

0 投票
2 回答
916 浏览
提问于 2025-04-19 17:26

如果我有两个表,它们的列是一样的,比如一个叫做Toyota的表,另一个叫做Honda的表,我该如何在Flask中用一个模型(也许叫做Car)来关联这两个表呢?

2 个回答

1

如果你有两个表格,它们的列是一样的,那么你的数据库设计可能可以做得更好。我觉得你应该有一个叫做“CarMake”(汽车品牌)的表格,里面记录像丰田、本田这样的品牌;还有另一个叫做“Car”(汽车)的表格,它里面有一个外键指向“CarMake”(比如可以用一个叫做car_make的字段来表示)。

这样的话,在Flask中你就可以用两个模型来表示:一个是Car(汽车),另一个是CarMake(汽车品牌)。

3

虽然你可以将多个表映射到一个类,但你所提到的问题可能用继承来解决会更好。继承主要有两种类型:连接继承和单表继承。因为你的例子中只有类型不同,其他列都是一样的,所以单表继承似乎更合适。

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',
    }

这个例子其实有点牵强;在这里使用继承并不太合适。所有的汽车其实可以不需要创建子类就能表示。如果你有子类,那就得为每一种品牌/型号/年份都创建一个子类,这样做太荒谬了。

撰写回答