【发布时间】:2014-05-04 22:27:07
【问题描述】:
假设我在同一个数据库表上有两种不同的类型(单表继承):
class Employee(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String, nullable = False)
discriminator = db.Column('type', String)
__mapper_args__ = {'polymorphic_on': discriminator}
class Manager(Employee):
__mapper_args__ = {'polymorphic_identity': 'manager'}
division = db.Column(db.String, nullable = False)
role = db.Column(db.String, nullable = False)
class Worker(Employee):
__mapper_args__ = {'polymorphic_identity': 'worker'}
title = db.Column(db.String, nullable = False)
(是的,我使用的是 Flask-SqlAlchemy 而不是普通的香草)现在我该如何将一种声明性模型转换为另一种。也就是说,如果“工人”被提升为“经理”怎么办?我怎么做?我是否必须编写原始 SQL 才能做到这一点?
很抱歉,如果之前有人问过这个问题,但我无法从 Google 中找到它。请注意,这是一个人为的例子。
【问题讨论】:
-
我认为与其编写纯 SQL,不如创建一个 Manager 实例并复制任何相关属性,然后删除原始 Worker。但这可能会很困难,具体取决于涉及多少外键等。
标签: python sqlalchemy flask-sqlalchemy