Python 将SQLAlchemy输出转储到JSON
我编写了一个小python脚本,它使用SQLAlchemy读取数据库的所有记录。下面是一些代码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
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