【发布时间】:2020-05-07 08:35:39
【问题描述】:
我尝试通过结合烧瓶应用程序使用 sqlalchemy 创建另一个 sql 表
我有一个类Table1db.model,它具有一些功能,我想通过创建另一个带有一些额外列(继承现有列)的Table2 类表来使用它的功能,不幸的是,当我尝试这样做,SQLAlchemy 的自动表单机制不会像其他继承 db.model 的类那样创建 table
db = SQLAlchemy(app)
class Table1(db.Model):
__tablename__ = "table1"
id = db.Column(db.String(36), primary_key=True)
class Table2(Table1):
__tablename__ = "table2"
id = db.Column(db.String(36), primary_key=True)
extra_column = db.Column(db.String(36), primary_key=True)
【问题讨论】:
-
@snakecharmerb 是的,但我继承的是
db.Model而不是declarative_base -
只是一个猜测,但你需要
super()Table1in__init__forTable2吗? -
@match
class Table2(Table1): def __init__(self): self.super() self.__tablename__ = "table2"我这样做了,但它不起作用 -
db.Model是一个声明性基类,尽管是自定义的。您似乎正在尝试设置联合继承,但子模型没有对父模型的外键引用。Table2.id看起来应该是那个引用,但是让extra_column与id形成一个复合主键会搞砸。仔细想想,不合逻辑。只有子表的一行应该引用父行,否则Table2的 2 个实例将共享状态(存储在 table1 中)。 -
另外一个未创建表的常见原因是在调用
db.create_all()等时模型还不存在。换句话说,它还没有被导入/包含它的模块被评估,所以它在那个时候不存在。
标签: python sql flask sqlalchemy