使用python將mysql數(shù)據(jù)庫的數(shù)據(jù)轉(zhuǎn)換為json數(shù)據(jù)的方法
由于產(chǎn)品運(yùn)營部需要采用第三方個(gè)推平臺,來推送消息。如果手動一個(gè)個(gè)鍵入字段和字段值,容易出錯(cuò),且非常繁瑣,需要將mysql的數(shù)據(jù)轉(zhuǎn)換為json數(shù)據(jù),直接復(fù)制即可。
本文將涉及到如何使用Python訪問Mysql數(shù)據(jù)庫及讀取獲取數(shù)據(jù)(前提需要安裝MySQLdb第三方庫哦),以及如何將數(shù)據(jù)轉(zhuǎn)換為json數(shù)據(jù),最后保存成文件輸出。
代碼如下:注釋比較詳細(xì)了。
# coding=utf-8
'''
Created on 2016-10-26
@author: Jennifer
Project:讀取mysql數(shù)據(jù)庫的數(shù)據(jù),轉(zhuǎn)為json格式
'''
import json,MySQLdb
def TableToJson():
try:
#1-7:如何使用python DB API訪問數(shù)據(jù)庫流程的
#1.創(chuàng)建mysql數(shù)據(jù)庫連接對象connection
#connection對象支持的方法有cursor(),commit(),rollback(),close()
conn = MySQLdb.Connect(host='mysql服務(wù)器地址',user='用戶名',passwd='密碼',db='數(shù)據(jù)庫名稱',port=3306,charset = 'utf8')
#2.創(chuàng)建mysql數(shù)據(jù)庫游標(biāo)對象 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.執(zhí)行sql命令
#execute可執(zhí)行數(shù)據(jù)庫查詢select和命令insert,delete,update三種命令(這三種命令需要commit()或rollback())
cur.execute(sql)
#5.獲取數(shù)據(jù)
#fetchall遍歷execute執(zhí)行的結(jié)果集。取execute執(zhí)行后放在緩沖區(qū)的數(shù)據(jù),遍歷結(jié)果,返回?cái)?shù)據(jù)。
#返回的數(shù)據(jù)類型是元組類型,每個(gè)條數(shù)據(jù)元素為元組類型:(('第一條數(shù)據(jù)的字段1的值','第一條數(shù)據(jù)的字段2的值',...,'第一條數(shù)據(jù)的字段N的值'),(第二條數(shù)據(jù)),...,(第N條數(shù)據(jù)))
data = cur.fetchall()
print u'fetchall()返回的數(shù)據(jù):',data
#6.關(guān)閉cursor
cur.close()
#7.關(guān)閉connection
conn.close()
jsonData = []
#循環(huán)讀取元組數(shù)據(jù)
#將元組數(shù)據(jù)轉(zhuǎn)換為列表類型,每個(gè)條數(shù)據(jù)元素為字典類型:[{'字段1':'字段1的值','字段2':'字段2的值',...,'字段N:字段N的值'},{第二條數(shù)據(jù)},...,{第N條數(shù)據(jù)}]
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'轉(zhuǎn)換為列表字典的原始數(shù)據(jù):',jsonData
except:
print 'MySQL connect fail...'
else:
#使用json.dumps將數(shù)據(jù)轉(zhuǎn)換為json格式,json.dumps方法默認(rèn)會輸出成這種格式"\u5377\u76ae\u6298\u6263",加ensure_ascii=False,則能夠防止中文亂碼。
#JSON采用完全獨(dú)立于語言的文本格式,事實(shí)上大部分現(xiàn)代計(jì)算機(jī)語言都以某種形式支持它們。這使得一種數(shù)據(jù)格式在同樣基于這些結(jié)構(gòu)的編程語言之間交換成為可能。
#json.dumps()是將原始數(shù)據(jù)轉(zhuǎn)為json(其中單引號會變?yōu)殡p引號),而json.loads()是將json轉(zhuǎn)為原始數(shù)據(jù)。
jsondatar=json.dumps(jsonData,ensure_ascii=False)
#去除首尾的中括號
return jsondatar[1:len(jsondatar)-1]
if __name__ == '__main__':
#調(diào)用函數(shù)
jsonData = TableToJson()
print u'轉(zhuǎn)換為json格式的數(shù)據(jù):',jsonData
#以讀寫方式w+打開文件,路徑前加r,防止字符轉(zhuǎn)義
f = open(r'D:\getui\getuidata.txt','w+')
#寫數(shù)據(jù)
f.write(jsonData)
#關(guān)閉文件
f.close()
執(zhí)行結(jié)果:(注代碼上方打印的數(shù)據(jù)為了方便查看數(shù)據(jù),可屏蔽,最終json數(shù)據(jù)會保存在txt文件中)
fetchall()返回的數(shù)據(jù): ((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', 3L, 2L),)
轉(zhuǎn)換為列表字典的原始數(shù)據(jù): [{'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'}]
轉(zhuǎn)換為json格式的數(shù)據(jù): {"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"}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python中將字典轉(zhuǎn)換成其json字符串
- python將字符串轉(zhuǎn)換成json的方法小結(jié)
- Python對象轉(zhuǎn)換為json的方法步驟
- python 對象和json互相轉(zhuǎn)換方法
- python實(shí)現(xiàn)class對象轉(zhuǎn)換成json/字典的方法
- 基于python實(shí)現(xiàn)把json數(shù)據(jù)轉(zhuǎn)換成Excel表格
- Python中xml和json格式相互轉(zhuǎn)換操作示例
- Python實(shí)現(xiàn)把json格式轉(zhuǎn)換成文本或sql文件
- 使用python把json文件轉(zhuǎn)換為csv文件
- Python中Json和其他類型相互轉(zhuǎn)換的實(shí)現(xiàn)示例
相關(guān)文章
Python 文件批量處理操作的實(shí)現(xiàn)示例
Python提供了豐富的工具來處理文件批量操作,包括批量重命名文件、移動文件和修改文件內(nèi)容,具有一定的參考價(jià)值,感興趣的可以了解一下2024-12-12
使用Python將字符串轉(zhuǎn)換為格式化的日期時(shí)間字符串
編寫Python腳本把sqlAlchemy對象轉(zhuǎn)換成dict的教程
在Python下利用OpenCV來旋轉(zhuǎn)圖像的教程
python類參數(shù)定義及數(shù)據(jù)擴(kuò)展方式unsqueeze/expand

