今天碰到了一个比较奇葩的需求,将mysql表数据转换成json格式。我顺便研究了一下,写了个python。
要我说,数据库操作学会了之后,会节省很多很多时间。
SQL数据—->json数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
import MySQLdb import json
sql = "SELECT id,NAME,LOCAL,mobile,CreateTime FROM db1.s1;"
Loginfo = {'USER':'admin', 'PSWD':'admin', 'HOST':'10.10.60.108', 'PORT':4001}
conn=MySQLdb.connect(host=Loginfo['HOST'],user=Loginfo['USER'],passwd=Loginfo['PSWD'],port=Loginfo['PORT'],charset='utf8') cur=conn.cursor() cur.execute(sql) data = cur.fetchall() fields = cur.description cur.close() conn.close()
column_list = [] for i in fields: column_list.append(i[0])
with open('/data/scripts/logdb/json.txt','w+') as f: for row in data: result = {} result[column_list[0]] = row[0] result[column_list[1]] = str(row[1]) 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) f.write(jsondata + '\n') f.close()
|
注意:最后输出结果,列的顺序是随机的。
如果想要顺序输出:1.字段起别名,比如:1_xx,2_xx,3_xx…..然后在在json.dumps中利用:sort_keys=True排序,结果就顺序输出。
例如:
1
| print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
|
{“a”: 0, “b”: 0, “c”: 0}
json格式—->sql语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
import MySQLdb import json
datalist = [] with open('/data/scripts/logdb/json.txt','r') as f: for line in f: datalist.append(json.loads(line)) for dict in datalist: print dict
for dict in datalist: dict[u'LOCAL'] = dict[u'LOCAL'].replace('\r\n','\\r\\n').replace("'s","\\'s") 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
|
本文转自:cnblogs