将对象添加到子表时,Flask SQLAlchemy将两行插入到父表

时间:2018-09-12 14:42:06

标签: python postgresql flask sqlalchemy flask-sqlalchemy

在这里需要一些帮助。我正在使用flask框架设置一个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如下定义flask上的表关系:

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拍摄的图像)都会得到两行:

Snapshot from PGAdmin

这里似乎是什么问题?当我尝试更新行对象时,似乎还会产生更多的问题。

感谢任何帮助或投入。

0 个答案:

没有答案