1. 程式人生 > 資料庫 >使用python將mysql資料庫的資料轉換為json資料的方法

使用python將mysql資料庫的資料轉換為json資料的方法

由於產品運營部需要採用第三方個推平臺,來推送訊息。如果手動一個個鍵入欄位和欄位值,容易出錯,且非常繁瑣,需要將mysql的資料轉換為json資料,直接複製即可。

本文將涉及到如何使用Python訪問Mysql資料庫及讀取獲取資料(前提需要安裝MySQLdb第三方庫哦),以及如何將資料轉換為json資料,最後儲存成檔案輸出。

程式碼如下:註釋比較詳細了。

# coding=utf-8
'''
Created on 2016-10-26
@author: Jennifer
Project:讀取mysql資料庫的資料,轉為json格式
'''
import json,MySQLdb

def TableToJson(): 
  try:
    #1-7:如何使用python DB API訪問資料庫流程的
    #1.建立mysql資料庫連線物件connection
    #connection物件支援的方法有cursor(),commit(),rollback(),close()
    conn = MySQLdb.Connect(host='mysql伺服器地址',user='使用者名稱',passwd='密碼',db='資料庫名稱',port=3306,charset = 'utf8') 
    #2.建立mysql資料庫遊標物件 cursor
    #cursor物件支援的方法有execute(sql語句),fetchone(),fetchmany(size),fetchall(),rowcount,close()
    cur = conn.cursor()
    #3.編寫sql
    sql = "SELECT pm.name AS nm,pm.desc AS dc,pm.image_url AS iu,pm.image_type AS it,pm.on_going AS og,pm.type AS mt,pm.pkgName AS pn,pm.apk_url AS du,pm.apkMd5 AS am,pm.minversionCode AS mc,pm.versionCode AS vc,pm.versionName AS vn,pm.signatureMd5 AS sm,pm.source AS se,pm.action AS ao FROM message pm WHERE pm.id = '217'"
    #4.執行sql命令
    #execute可執行資料庫查詢select和命令insert,delete,update三種命令(這三種命令需要commit()或rollback())
    cur.execute(sql)
    #5.獲取資料 
    #fetchall遍歷execute執行的結果集。取execute執行後放在緩衝區的資料,遍歷結果,返回資料。
    #返回的資料型別是元組型別,每個條資料元素為元組型別:(('第一條資料的欄位1的值','第一條資料的欄位2的值',...,'第一條資料的欄位N的值'),(第二條資料),(第N條資料))
    data = cur.fetchall()
    print u'fetchall()返回的資料:',data
    #6.關閉cursor
    cur.close()
    #7.關閉connection
    conn.close()
    jsonData = []
    #迴圈讀取元組資料
    #將元組資料轉換為列表型別,每個條資料元素為字典型別:[{'欄位1':'欄位1的值','欄位2':'欄位2的值','欄位N:欄位N的值'},{第二條資料},{第N條資料}]
    for row in data: 
      result = {} 
      result['nm'] = row[0] 
      result['dc'] = row[1] 
      result['iu'] = row[2] 
      result['it'] = str(row[3])  
      result['og'] = str(row[4])  
      result['mt'] = str(row[5])  
      result['pn'] = row[6] 
      result['du'] = row[7] 
      result['am'] = row[8] 
      result['mc'] = str(row[9]) 
      result['vc'] = str(row[10]) 
      result['vn'] = row[11] 
      result['sm'] = row[12]
      result['se'] = str(row[13]) 
      result['ao'] = str(row[14])  
      jsonData.append(result)
      print u'轉換為列表字典的原始資料:',jsonData
      
  except: 
    print 'MySQL connect fail...' 
  else:
    #使用json.dumps將資料轉換為json格式,json.dumps方法預設會輸出成這種格式"\u5377\u76ae\u6298\u6263",加ensure_ascii=False,則能夠防止中文亂碼。
    #JSON採用完全獨立於語言的文字格式,事實上大部分現代計算機語言都以某種形式支援它們。這使得一種資料格式在同樣基於這些結構的程式語言之間交換成為可能。
    #json.dumps()是將原始資料轉為json(其中單引號會變為雙引號),而json.loads()是將json轉為原始資料。
    jsondatar=json.dumps(jsonData,ensure_ascii=False)
    #去除首尾的中括號
    return jsondatar[1:len(jsondatar)-1]
 
if __name__ == '__main__': 
  #呼叫函式
  jsonData = TableToJson() 
  print u'轉換為json格式的資料:',jsonData 
  #以讀寫方式w+開啟檔案,路徑前加r,防止字元轉義
  f = open(r'D:\getui\getuidata.txt','w+')
  #寫資料
  f.write(jsonData)
  #關閉檔案 
  f.close()

執行結果:(注程式碼上方列印的資料為了方便檢視資料,可遮蔽,最終json資料會儲存在txt檔案中)

fetchall()返回的資料: ((u'\u5377\u76ae\u6298\u6263',u'\u5377\u76ae\u6298\u6263',u'http://域名/push/push_d701df5f48c727df46c847fa912993cf.jpg',3L,0L,1L,u'com.juanpi.ui',u'http://域名/apk_1476871813.apk',u'301e757dc6669ecc95ffaaae13bb096d',14L,64L,u'4.1.2',u'd1e536a6a60f414700cf3c86f28719c2',2L),)

轉換為列表字典的原始資料: [{'vc': '64','nm': u'\u5377\u76ae\u6298\u6263','mc': '14','og': '0','am': u'301e757dc6669ecc95ffaaae13bb096d','iu': u'http://域名/push/push_d701df5f48c727df46c847fa912993cf.jpg','it': '3','vn': u'4.1.2','dc': u'\u5377\u76ae\u6298\u6263','mt': '1','ao': '2','sm': u'd1e536a6a60f414700cf3c86f28719c2','du': u'http://域名/apk_1476871813.apk','pn': u'com.juanpi.ui','se': '3'}]
轉換為json格式的資料: {"vc": "64","nm": "卷皮折扣","mc": "14","og": "0","am": "301e757dc6669ecc95ffaaae13bb096d","iu": "http:/域名/push/push_d701df5f48c727df46c847fa912993cf.jpg","it": "3","vn": "4.1.2","dc": "卷皮折扣","mt": "1","ao": "2","sm": "d1e536a6a60f414700cf3c86f28719c2","du": "http://域名/apk_1476871813.apk","pn": "com.juanpi.ui","se": "3"}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。