Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有办法将sqlalchemy orm实例转储到json?_Python_Json_Sqlalchemy - Fatal编程技术网

Python 有没有办法将sqlalchemy orm实例转储到json?

Python 有没有办法将sqlalchemy orm实例转储到json?,python,json,sqlalchemy,Python,Json,Sqlalchemy,我用python编写这个函数是为了将对象转储到json。有没有更好、更经过测试的方法来使用这个库呢 def model_jsonify(self,instance): from sqlalchemy.orm import class_mapper , ColumnProperty attrs = [prop.key for prop in class_mapper(instance.__class__).iterate_properties if isinstance(prop,

我用python编写这个函数是为了将对象转储到json。有没有更好、更经过测试的方法来使用这个库呢

def model_jsonify(self,instance):
    from sqlalchemy.orm import class_mapper , ColumnProperty
    attrs = [prop.key for prop in class_mapper(instance.__class__).iterate_properties if isinstance(prop, ColumnProperty)]

    r = dict()

    for attr in attrs :
        c = getattr(instance,attr)
        assert not c is None
        r[attr] = c

    return r

为了完成这个问题,我编写了以下代码。您可以查询简单的ORM对象或列表(查询联接时的结果)。但您不能序列化单个字段(如仅查询带有某些字段的联接)

这是我用两个查询编写的一个小测试:

purchaseorder = mi.session.query(PurchaseOrder).first()
assert purchaseorder != None

j = mi.model_jsonify (purchaseorder)
assert not j is None
assert isinstance(j,dict)

assert j['purchaseorder']['name'] == 'january'

bompurchaseorderlines = mi.session.query(BoMPurchaseOrderLine,SupplierLine).join(SupplierLine).all()
assert not bompurchaseorderlines is None

for purchaseorder in bompurchaseorderlines :
    j = mi.model_jsonify (purchaseorder)

我认为你的功能已经很好了。到目前为止有什么缺点吗?这似乎在[如何将SQLalchemy创建为JSON][1][1]中有所介绍:是的,它几乎是同一个函数,我以前没有找到过它
purchaseorder = mi.session.query(PurchaseOrder).first()
assert purchaseorder != None

j = mi.model_jsonify (purchaseorder)
assert not j is None
assert isinstance(j,dict)

assert j['purchaseorder']['name'] == 'january'

bompurchaseorderlines = mi.session.query(BoMPurchaseOrderLine,SupplierLine).join(SupplierLine).all()
assert not bompurchaseorderlines is None

for purchaseorder in bompurchaseorderlines :
    j = mi.model_jsonify (purchaseorder)