对象如下所示
{
"id":1,
"image":"path/to/image",
"employee_data":<sql_alcahmy_object>,
}
同样,sql\u alcahmy\u对象如下
{
"employee_previous":<sql_alchemy_object2>,
"employee_salary":"1$",
}
同样,sql\u alcahmy\u object2如下所示
{"company":"xyz","years":10}
下面的方法将用于从sql alchemy对象中提取所有数据
sql_alchemy_object.__dict__
下面是计划好的递归方法,但没有成功
def extract_recursive(deepvalue,alldata={}):
for eachkey,eachvalue in deepvalue.__dict__.iteritems():
if hasattr(eachvalue,"__dict__"):
alldata.update({eachkey:extract_recursive(eachvalue)})
else:
alldata.update({eachkey:eachvalue})
print(alldata)
预期产量
{
"id":1,
"image":"path/to/image",
"employee_data":{
"employee_previous":{"company":"xyz","years":10},
"employee_salary":"1$",
}
}
deepvalue和sql\u alcahmy\u对象中可用的方法如下
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__mapper__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__table__', '__tablename__', '__weakref__', '_decl_class_registry', '_sa_class_manager', 'age']
对这里的^{} 有一个误解
实际上是的
但它不允许访问dict的嵌套dict
因此,如果您想在dict中迭代项,只需调用
thedict.iteritems()
而不是thedict.__dict__.iteritems()
然后,如果要检查变量是否包含
dict
实例,请使用isinstance(a_dict, dict)
,而不是hasattr(a_dict, '__dict__')
另外,使用可变对象作为函数参数的默认值可能会产生非直观的结果,因此强烈建议不要这样做(请参见"Least Astonishment" and the Mutable Default Argument) 相反,您应该传递
None
作为默认值,并在函数的开头添加一个alldata = alldata or {}
最后,虽然我不明白你函数的要点,但这个版本应该更好:
相关问题 更多 >
编程相关推荐