В настоящее время я работаю над реализацией классов моделей для моей базы данных. Я понял, так как у меня есть более одного вхождения таблицы, которая имеет только столбцы 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
& 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
и ABC
, я получил конфликт метакласса
Спасибо