Flask SQLAlchemy select child object - return JSONB 列
Flask SQLAlchemy select child object - return JSONB column
我有 class 和 one-many 关系。我想 return 所有 parent 的 children 的关系;具体来说,我想 return 我的 children 表中的所有 JSONB objects。
这些是我的 class:
class Parent(db.Model):
__tablename__ = ‘parent220416'
id = db.Column(db.Integer, primary_key=True)
children = db.relationship(‘Child’, backref=‘Parent’, lazy='dynamic')
class Child(db.Model):
__tablename__ = ‘child220416'
id = db.Column(db.Integer, primary_key=True)
parentid = db.Column(db.Integer, db.ForeignKey('words220416.id'))
data = db.Column(JSONB)
然后使用 Flask Restful,我正在尝试 select 所有 child 像这样:
class ParentChild(Resource):
def get(self, id):
result = db.session.query(Parent).get(id)
result_child = result.children
return {'child': result_child}
出现错误:
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <sqlalchemy.orm.dynamic.AppenderBaseQuery object at 0x106178da0> is not JSON serializable
如果您想获取父项的每个子项的所有 data
对象。您可以执行以下查询:
result_child = db.session.query(Child.data).filter(Child.parentid == id).all()
如果要使用 children
关系,可以对其进行迭代:
result_child = [child.data for child in result.children]
我有 class 和 one-many 关系。我想 return 所有 parent 的 children 的关系;具体来说,我想 return 我的 children 表中的所有 JSONB objects。
这些是我的 class:
class Parent(db.Model):
__tablename__ = ‘parent220416'
id = db.Column(db.Integer, primary_key=True)
children = db.relationship(‘Child’, backref=‘Parent’, lazy='dynamic')
class Child(db.Model):
__tablename__ = ‘child220416'
id = db.Column(db.Integer, primary_key=True)
parentid = db.Column(db.Integer, db.ForeignKey('words220416.id'))
data = db.Column(JSONB)
然后使用 Flask Restful,我正在尝试 select 所有 child 像这样:
class ParentChild(Resource):
def get(self, id):
result = db.session.query(Parent).get(id)
result_child = result.children
return {'child': result_child}
出现错误:
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <sqlalchemy.orm.dynamic.AppenderBaseQuery object at 0x106178da0> is not JSON serializable
如果您想获取父项的每个子项的所有 data
对象。您可以执行以下查询:
result_child = db.session.query(Child.data).filter(Child.parentid == id).all()
如果要使用 children
关系,可以对其进行迭代:
result_child = [child.data for child in result.children]