2016-04-26 3 views
0

私は1対多の関係を持つクラスを持っています。私はその関係に親の子供たちをすべて戻したいと思っています。具体的には、すべてのJSONBオブジェクトを子テーブルに戻したいと考えています。フラスコSQLAlchemy select子オブジェクト - JSONBカラムを返す

raise TypeError(repr(o) + " is not JSON serializable") 
TypeError: <sqlalchemy.orm.dynamic.AppenderBaseQuery object at 0x106178da0> is not JSON serializable 
:エラーがあり

class ParentChild(Resource): 
    def get(self, id): 
      result = db.session.query(Parent).get(id) 
      result_child = result.children 
      return {'child': result_child} 

これらは私のクラスです:フラスコRESTfulなとその後

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) 

、私はこのようなすべての子を選択しようとしています

答えて

1

親の各子にdataオブジェクトをすべて取得したい場合。あなたは、次のクエリを行うことができます:

result_child = [child.data for child in result.children] 
+0

それは動作しますが、私は理解している場合、私は本当にしないでください。

result_child = db.session.query(Child.data).filter(Child.parentid == id).all()

あなたがchildren関係を使用したい場合は、それを反復することが可能です私の2つのクラスで宣言された関係を悪用する...この関係を利用するベストプラクティスはありますか? –

+0

2つ目のオプションのうちの2番目のオプションは、関係を使用します。しかし、私はあなたが意味することを理解しています。その関係の利用は非常に浅いようです。私はあなたが望む目的のために関係をより深く使う方法を見いださず、関係を反復することはかなり一般的です(私はそれが特に好きではありませんが、これが最初の選択肢を与えた理由です)。あなたが関係を反復するのが好きでないなら、[marshmallow](https://marshmallow.readthedocs.org/en/latest/)のようなもので子供を連載してみることができます。 –

関連する問題