将具有非标准类型的查询结果序列化为JSON的Python方式
所以我正在学习如何构建一个flask Web服务,我从下面的代码开始将具有非标准类型的查询结果序列化为JSON的Python方式,python,json,web-services,sqlalchemy,Python,Json,Web Services,Sqlalchemy,所以我正在学习如何构建一个flask Web服务,我从下面的代码开始 #... 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.
#...
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的特性和类库,以更具Python风格的方式处理上述情况?是一个不错的库,用于将Python对象序列化为JSON字符串
import jsonpickle
json_str = jsonpickle.encode(obj)
还有一种方法可以在以后对其进行解码
如果您曾经序列化过SQLAlchemy模型实例(与SQL结果集相比),请确保分离它们或使它们暂时化,以避免出现问题。是将Python对象序列化为JSON字符串的理想库
import jsonpickle
json_str = jsonpickle.encode(obj)
还有一种方法可以在以后对其进行解码
如果您曾经序列化过SQLAlchemy模型实例(与SQL结果集相比),请确保将它们分离或暂时分离,以避免出现问题。使用dict理解。但最重要的是用它来代替这个网站。我不知道codereview.stackexchange.com网站我将来会用它来回答这类问题。使用dict理解。但大多数情况下都是使用这个网站,我不知道codereview.stackexchange.com网站,我将来会用它来回答这类问题。