Python 将SQLAlchemy输出转储到JSON

Python 将SQLAlchemy输出转储到JSON,python,Python,我编写了一个小python脚本,它使用SQLAlchemy读取数据库的所有记录。下面是一些代码 Base=declarative_base() Session = sessionmaker(bind=engine) cess=Session() class Test(Base): __tablename__ = 'test' my_id = Column(Integer, primary_key=True) name = Column(String) d

我编写了一个小python脚本,它使用SQLAlchemy读取数据库的所有记录。下面是一些代码

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.dumpsquery会引发异常吗

亲切问候

将根据对象的属性转换对象

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

描述如何将表行转换为dict

或者,可以直接使用row对象的方法

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

json.dumps([ row._asdict() for row in query ])
另一种方法可能是直接在每行上访问_dict _;属性,不过您应该检查输出以确保行中没有内部状态变量

将根据对象的属性转换对象

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

描述如何将表行转换为dict

或者,可以直接使用row对象的方法

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

json.dumps([ row._asdict() for row in query ])
另一种方法可能是直接在每行上访问_dict _;属性,不过您应该检查输出以确保行中没有内部状态变量

我是如何做到的:

fe = SomeClass.query.get(int(1))
fe_dict = fe.__dict__
del fe_dict['_sa_instance_state']
return flask.jsonify(fe_dict)
基本上,给定您检索到的对象,获取类实例的dict,删除无法json序列化并转换为json的sqlalchemy对象。我正在使用flask来实现这一点,但我认为json.dumps也会起同样的作用。

我是如何做到的:

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

基本上,给定您检索到的对象,获取类实例的dict,删除无法json序列化并转换为json的sqlalchemy对象。我正在使用flask来实现这一点,但我认为json.dumps也会起到同样的作用。

请您展示一下dict方法。“我对python真的很陌生?”BadLuckBrian回答。抱歉,我对SO answer.print json.dumps[row2dictrow for row in query.all]文件alc-test.py,第28行,row2dict for column in row.\uuuu table\uuuuuu.columns:AttributeError:'KeyedTuple'对象没有属性'table'@BadLuckBrian我目前还没有访问机器来测试它,但也许你可以根据最新的编辑使用asdict?基本上,您的想法是将一行转换为字典,然后可以通过json.dumps来理解。“我对python真的很陌生?”BadLuckBrian回答。抱歉,我对SO answer.print json.dumps[row2dictrow for row in query.all]文件alc-test.py,第28行,row2dict for column in row.\uuuu table\uuuuuu.columns:AttributeError:'KeyedTuple'对象没有属性'table'@BadLuckBrian我目前还没有访问机器来测试它,但也许你可以根据最新的编辑使用asdict?基本上,您的想法是将一行转换为字典,然后通过json.dumps.mable replicate of mable replicate of