2016-11-18 54 views
-1

我使用在服务器端的烧瓶,我有以下API:转换SQL表中的数据JSON

class DateTimeEncoder(json.JSONEncoder): 
    def default(self, o): 
     if isinstance(o, datetime): 
      return o.isoformat() 

     return json.JSONEncoder.default(self, o) 


@app.route('/getTransaction', methods=['GET','POST']) 
def getTransaction(): 

uid = request.form["uid"] 
db = my.connect("somehost.com","someuser","somepwd","someDB") 
cur = db.cursor() 

cur.execute("select * from Transactions where uid='%s'" %(uid)) 

json_string = json.dumps(cur.fetchall(),cls=DateTimeEncoder) 

db.close() 
return json.dumps(json_string) 

在此之后,我得到的反应是:

http://sairav.pythonanywhere.com/getTransaction

有没有一种方法,我可以用键(例如名称,描述,数量,类型,ID,在响应中可以看到的值的时间)以json格式转换此数据

需要的格式JSON数组:

{"data":[ 
    {"Name":"John", "desc":"Doe","amount":"123.0","type":"credit","uid":"213","time":"12-11-2016 12:23:22"}, 
    {"Name":"John2", "desc":"Doe","amount":"1234.0","type":"credit","uid":"213","time":"12-11-2016 12:23:22"}, 
    {"Name":"John3", "desc":"Doe","amount":"1235.0","type":"credit","uid":"213","time":"12-11-2016 12:23:22"}, 
]} 
+1

默认光标是一个行光标即它发出'[ “约翰”, “DOE”, “123.0”, “信用”]'。您可以创建一个'dictcursor',它将以字典形式发出行。否则,您可以像访问[this so answer](http://stackoverflow.com/a/5058950/1520594)一样访问'cursor.description',并用字段名称压缩该行。一旦你有了,你可以继续使用json.dumps – algrebe

回答

1

找到真正helpul answer这里由此能够彻底解决我的目的,它集我的表列名在JSON数组JSON对象的键。 感谢algrebe的链接。

我与必需的JSON输出运行的代码是:

@app.route('/getTransaction', methods=['GET','POST']) 
    def getTransaction(): 

    uid = request.form["uid"] 
    db = my.connect("somehost.com","someuser","somepwd","someDB") 
    cur = db.cursor() 

    cur.execute("select * from Transactions where uid='%s'" %(uid)) 


    **columns = cur.description 
    result = [{columns[index][0]:column for index, column in enumerate(value)} for value in cur.fetchall()]** 


    db.close() 

    **return json.dumps(result,cls=DateTimeEncoder)**