我目前正在建立CMS。我想要一个page
表和一个page_revision
表,其中page_revision
的所有列都是page
+ rev_id
+ rev_parent_id
。>
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Page(db.Model):
__tablename__ = 'pages'
page_id = db.Column(db.Integer, primary_key=True)
content = db.Column(db.Text(), default='', nullable=False)
class PageRevision(Page):
__tablename__ = 'pages_revisions'
rev_id = db.Column(db.Integer, primary_key=True)
rev_parent_id = db.Column(db.Integer, nullable=True)
尝试flask db migrate
时出现错误:
sqlalchemy.exc.NoForeignKeysError: Can't find any foreign key relationships between 'pages' and 'pages_revisions'.
我不确定会发生什么。我想做的是复制结构,但是我不希望从面向对象的角度继承。
有没有一种方法可以简单复制并粘贴所有列(使page_id
不是主键)?
答案 0 :(得分:0)
这感觉像是一堆肮脏的东西,我不确定它是否能按预期工作,但可能会有所启发;)
想法是通过复制Page的字段来动态创建PageRevision类。
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Page(db.Model):
__tablename__ = 'pages'
page_id = db.Column(db.Integer, primary_key=True)
content = db.Column(db.Text(), default='', nullable=False)
def columns_of_table(table_type):
for col in Page.__table__.columns:
yield col.key, db.Column(col.type, default=col.default, nullable=col.nullable, primary_key=False)
PageRevision = type('PageRevision', (db.Model, ), {
'rev_id': db.Column(db.Integer, primary_key=True),
'rev_parent_id': db.Column(db.Integer, nullable=True),
**{key: col for key, col in columns_of_table(Page)}
})