Python 如何继承继承db.Model的类
我尝试通过结合flask应用程序,使用sqlalchemy创建另一个sql表 我有一个类Python 如何继承继承db.Model的类,python,sql,flask,sqlalchemy,Python,Sql,Flask,Sqlalchemy,我尝试通过结合flask应用程序,使用sqlalchemy创建另一个sql表 我有一个类Table1db.model,它有一些功能,我想通过创建另一个Table2类表和一些额外的列(继承现有列)来使用它的功能,不幸的是,当我尝试这样做时,SQLAlchemy的自动表单机制没有创建表,就像它对继承db.model的其他类所做的那样 db = SQLAlchemy(app) class Table1(db.Model): __tablename__ = "table1" id
Table1
db.model
,它有一些功能,我想通过创建另一个Table2
类表和一些额外的列(继承现有列)来使用它的功能,不幸的是,当我尝试这样做时,SQLAlchemy的自动表单机制没有创建表
,就像它对继承db.model的其他类所做的那样
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)
您必须将\uuuu abstract\uuuu=True
添加到表1中,但表1不会由SQLAlchemy ORM系统创建
db = SQLAlchemy(app)
class Table1(db.Model):
__tablename__ = "table1"
__abstract__ = True
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
,而不是声明性的\u base
只是一个猜测,但是你需要super()
Table1
中\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
我这样做了,但它不工作db。Model
是一个声明性基类,尽管是一个定制的基类。您似乎正在尝试设置联接继承,但子模型没有对父模型的外键引用Table2.id
看起来应该是那个引用,但是有extra_列
形成一个带有id
的复合主键会把它搞砸。想想看,这不符合逻辑。子表中只有一行应该引用父行,否则Table2
的两个实例将共享状态(存储在table1中)。未创建表的另一个常见原因是调用db.create\u all()
或类似调用时模型还不存在。换句话说,它还没有被导入/包含它的模块没有被评估,因此它在那个点上不存在。