Flask SQLAlchemy вставляет 2 строки в родительскую таблицу при добавлении объекта в дочернюю таблицу - PullRequest
0 голосов
/ 12 сентября 2018

Здесь понадобится помощь. Я настраиваю среду 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

В чем здесь проблема? Кажется, это создает намного больше проблем в будущем, когда я пытаюсь обновить объект строки.

Ценю любую помощь или вклад.

...