Здесь понадобится помощь. Я настраиваю среду API с помощью фреймворка. Затем я использовал Flask SQLAlchemy для подключения к Postgresql.
Я создал родительскую и дочернюю таблицу на postgres следующим образом:
CREATE TABLE public.test_table(
id smallint NOT NULL GENERATED ALWAYS AS IDENTITY ,
username varchar(128),
type varchar(55),
CONSTRAINT test_table_pk PRIMARY KEY (id));
ALTER TABLE public.test_table OWNER TO postgres;
CREATE TABLE public.child_table(
value varchar(55),
CONSTRAINT child_table_pk PRIMARY KEY (id)
) INHERITS(public.test_table);
ALTER TABLE public.child_table OWNER TO postgres;
Затем я определил отношения таблиц в колбе с помощью SQLAlchemy следующим образом:
class TestTable(db.Model):
__tablename__ = 'test_table'
id = db.Column(db.Integer(), primary_key=True)
username = db.Column(db.String(128))
type = db.Column(db.String(55))
__mapper_args__ = {
'polymorphic_identity': 'test_table',
'polymorphic_on': type
}
class ChildTable(TestTable):
id = db.Column(db.ForeignKey('test_table.id'), primary_key=True)
value = db.Column(db.String(55))
__mapper_args__ = {
'polymorphic_identity': 'child_table'
}
Затем я запустил код следующим образом:
@application.route('/api/test', methods=['GET', 'POST'])
def test():
child = ChildTable()
child.username = 'Test'
child.value = 'Test value'
try:
db.session.add(child)
db.session.commit()
except exc.SQLAlchemyError as e:
print(e)
return jsonify({})
Код успешно добавляет новый дочерний объект. Однако я заметил, что когда я запрашиваю родительскую таблицу (TestTable), я получаю две строки для каждого нового добавленного объекта (изображение взято из PgAdmin):
Снимок с PGAdmin
В чем здесь проблема? Кажется, это создает намного больше проблем в будущем, когда я пытаюсь обновить объект строки.
Ценю любую помощь или вклад.