今天碰到了一個比較奇葩的需求眯停,將mysql表數(shù)據(jù)轉(zhuǎn)換成json格式济舆。我順便研究了一下,寫了個python莺债。
- 數(shù)據(jù)庫相關(guān)的基本操作
- 如果使用python操作mysql
滋觉,要我說,數(shù)據(jù)庫操作學會了之后齐邦,會節(jié)省很多很多時間椎侠。
SQL數(shù)據(jù)--->json數(shù)據(jù)
#!/usr/bin/env python
#-*- coding: utf8 -*-
import MySQLdb
import json
# 定義查詢SQL語句
sql = "SELECT id,NAME,LOCAL,mobile,CreateTime FROM db1.s1;"
# 設(shè)置列的別名或者直接用表字段名:(下面的sql含有別名)
# sql="SELECT s.id AS 1_id,s.name AS 2_na,s.local AS 3_lo,s.mobile AS 4_mo,s.CreateTime AS 5_ct FROM db1.s1 s;"
# 定義連接MySQL的登錄信息(此處以字典形式)
Loginfo = {'USER':'admin', 'PSWD':'admin', 'HOST':'10.10.60.108', 'PORT':4001}
# Python 連接MySQL
conn=MySQLdb.connect(host=Loginfo['HOST'],user=Loginfo['USER'],passwd=Loginfo['PSWD'],port=Loginfo['PORT'],charset='utf8')
cur=conn.cursor()
cur.execute(sql) # 執(zhí)行SQL查詢
data = cur.fetchall() # 查詢結(jié)果給data。如果執(zhí)行:print data 顯示結(jié)果:((第一行內(nèi)容)措拇,(第二行內(nèi)容)我纪,(第三行內(nèi)容),(第四行內(nèi)容))
fields = cur.description # 獲取查詢結(jié)果中列的字段名丐吓,如果查詢SQL中使用別名浅悉,此處顯示別名。
cur.close()
conn.close()
# Main
column_list = [] # 定義字段名的列表
for i in fields:
column_list.append(i[0]) # 提取字段名券犁,追加到列表中
#print column_list # 列表顯示結(jié)果:['id', 'NAME', 'LOCAL', 'mobile', 'CreateTime']
with open('/data/scripts/logdb/json.txt','w+') as f: # 打開輸出結(jié)果文件
for row in data: # 一次循環(huán)术健,row代表一行,row以元組的形式顯示粘衬。
result = {} # 定義Python 字典
result[column_list[0]] = row[0] # 將row中的每個元素荞估,追加到字典中咳促。
result[column_list[1]] = str(row[1]) # Python字段格式 和json字段格式轉(zhuǎn)換
result[column_list[2]] = str(row[2])
result[column_list[3]] = row[3]
result[column_list[4]] = str(row[4])
jsondata=json.dumps(result,ensure_ascii=False) # Python的dict --轉(zhuǎn)換成----> json的object
f.write(jsondata + '\n') # 寫入文件
f.close()
注意:最后輸出結(jié)果勘伺,列的順序是隨機的跪腹。
如果想要順序輸出:1.字段起別名,比如:1_xx,2_xx,3_xx.....然后在在json.dumps中利用:sort_keys=True排序娇昙,結(jié)果就順序輸出尺迂。
例如:
print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
{"a": 0, "b": 0, "c": 0}
json格式--->sql語句
#!/usr/bin/env python
#-*- coding: utf8 -*-
import MySQLdb
import json
datalist = [] # python 列表
with open('/data/scripts/logdb/json.txt','r') as f:
for line in f: # 讀取json文件中的行(也就是json的object)
datalist.append(json.loads(line)) # 將json的object轉(zhuǎn)成 Python的dict,追加到Python 列表中, 結(jié)果都是unicode格式:[{},{},{},{},{}]
for dict in datalist:
print dict # 打印顯示 轉(zhuǎn)換后的結(jié)果
for dict in datalist:
dict[u'LOCAL'] = dict[u'LOCAL'].replace('\r\n','\\r\\n').replace("'s","\\'s") # 將字段中的特殊:回車換行以及's 轉(zhuǎn)換冒掌,方便形成sql語句
sql = "insert into db1.s1 (mobile,NAME,LOCAL,CreateTime,id) values('%s','%s','%s','%s','%s');" % (dict[u'mobile'],dict[u'NAME'],dict[u'LOCAL'],str(dict[u'CreateTime']),dict[u'id'])
print sql
本文轉(zhuǎn)自:cnblogs