所以我正在学习如何建立一个烧瓶网络服务,我开始使用这样的代码。
#...
class Objects(Resource) :
def get(self) :
conn = engine.connect()
query = conn.execute("SELECT * FROM objects")
return {'objects' : [dict(zip(tuple(query.keys()), i)) for i in query.cursor]}
api.add_resource(objects, '/objects')`
#...
这是好的,直到我遇到一个表,数据库中的字段表示为十进制,不能用上面的例子序列化。
所以我摸索着想出了以下内容。
class object(Resource) :
def get(self):
conn = engine.connect()
query = conn.execute("SELECT * FROM objects")
objects = []
for row in query:
object = {}
for key in query.keys() :
if(type(row[key]) is decimal.Decimal) :
object[key] = float(row[key])
else :
object[key] = row[key]
objects.append(object)
return {'objects': objects}
该代码工作正常,但我的直觉告诉我必须有更好的方法来编写它。不熟悉python但是我不确定如何继续......
如何利用pythons功能和类库以更加pythonic的方式处理上述情况?
答案 0 :(得分:0)
https://jsonpickle.github.io/是一个不错的库,用于将Python对象序列化为JSON字符串。
import jsonpickle
json_str = jsonpickle.encode(obj)
稍后还有一种解码方法。
如果你曾经序列化SQLAlchemy模型实例(与SQL结果集相比),请确保你要分离或使它们成为瞬态,以避免出现问题。