1

I have written a small python script that uses SQLAlchemy to read all records of the db. Here is some of the code

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()

Now the query object i want to convert to a json string. How can i do this ? using json.dumps(query) throws an exception ?

Kind Regards

4

2 回答 2

3

json.dumps将根据其转换表转换对象。

由于您有 type 行Test,因此无法直接序列化这些行。可能最快的方法是将每个返回的行转换为 Python dict,然后将其传递给json.dumps.

这个答案描述了如何将表格行转换为字典。

或者,也许可以直接使用来自行对象的_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 回答