在这里需要一些帮助。我正在使用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拍摄的图像)都会得到两行:
这里似乎是什么问题?当我尝试更新行对象时,似乎还会产生更多的问题。
感谢任何帮助或投入。