我目前正在为数据库实现模型类。
我意识到,由于我多次出现一个仅包含id
和name
列的表,因此声明它们的模型类是相等的,并且看起来很像:
sql_alchemy = SQLAlchemy()
class MyModel(sql_alchemy.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True, nullable=False)
def __init__(self, name):
self.name = name
以及其他一些可以共享的方法...
此外,我还有另一个类,该类具有模型所代表的表的外键:
class MyRecord(sql_alchemy.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True, nullable=False)
my_model_id = db.Column(db.Integer, ForeignKey('my_model.id'), nullable=False)
def __init__(self, name, my_model_id):
self.name = name
self.my_model_id= my_model_id
首先,我认为为了防止编写另一个看上去与MyModel
完全一样的类,只是使用不同的名称(MyModel2
),我将实现一个MyModel
和{{ 1}}的继承,它将包含共享代码,并且MyModel2
和MyModel
的代码将类似于以下内容:
MyModel2
我试图通过一个例外来做到sql_alchemy = SQLAlchemy()
class MyBaseModel(sql_alchemy.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True, nullable=False)
def __init__(self, name):
self.name = name
class MyModel(BaseNamedModel):
def __init__(self, name):
super().__init__(name)
class MyModel2(BaseNamedModel):
def __init__(self, name):
super().__init__(name)
:
MyRecord
第二,我想使sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'my_record.my_model_id' could not find table 'my_model' with which to generate a foreign key to target column 'id'
抽象化,因为它不是我的应用程序的实际实体,并且我想防止创建该类型的对象。当我尝试通过继承MyBaseModel
和sql_alchemy.Model
来做到这一点时,我遇到了元类冲突
谢谢