1

SQLAlchemy を使用してデータベースのすべてのレコードを読み取る小さな python スクリプトを作成しました。ここにコードの一部があります

Base=declarative_base()
Session = sessionmaker(bind=engine)
cess=Session()

class Test(Base):
     __tablename__ = 'test'
     my_id = Column(Integer, primary_key=True)
     name = Column(String)
     def __init__(self, id, name):
         self.my_id = id
         self.name = name
     def __repr__(self):
        return "<User('%d','%s')>" % (self.id, self.name)



query= cess.query(Test.my_id, Test.name).order_by(Test.my_id).all()

今、json文字列に変換したいクエリオブジェクト。これどうやってするの ?json.dumps(query) を使用すると例外がスローされますか?

敬具

4

2 に答える 2

3

json.dumpsは、その変換テーブルに従ってオブジェクトを変換します。

type の行があるためTest、これらを直接シリアル化することはできません。おそらく最も簡単な方法は、返された各行を Python に変換し、dictこれを に渡すことjson.dumpsです。

この回答では、テーブルの行を dict に変換する方法について説明しています。

または、行オブジェクトの_asdict()メソッドを直接利用することもできます。

query = cess.query(Test.my_id, Test.name).order_by(Test.my_id).all()

json.dumps([ row._asdict() for row in query ])

__dict__別の方法として、各行のアトリビュートに直接アクセスすることもできますが、出力をチェックして に内部状態変数がないことを確認する必要がありますrow.__dict__

query = cess.query(Test.my_id, Test.name).order_by(Test.my_id).all()

json.dumps([ row.__dict__ for row in query ])
于 2013-10-01T07:30:06.557 に答える
2

私がそれをした方法:

fe = SomeClass.query.get(int(1))
fe_dict = fe.__dict__
del fe_dict['_sa_instance_state']
return flask.jsonify(fe_dict)

基本的に、取得したオブジェクトを指定して、クラス インスタンスの dict を取得し、json シリアル化できない sqlalchemy オブジェクトを削除して、json に変換します。これを行うためにフラスコを使用していますが、 json.dumps() も同じように機能すると思います。

于 2014-03-07T03:28:13.730 に答える