Python mysql表數據和json格式的相互轉換


 

功能:

  1.Python 腳本將mysql表數據轉換成json格式

  2.Python 腳本將json數據轉成SQL插入數據庫

表數據:

SQL查詢:SELECT id,NAME,LOCAL,mobile,CreateTime FROM db1.s1;

 

第一部分:SQL數據--->json數據

--------腳本內容-------sqltojson.py-------------------

#!/usr/bin/env python
#-*- coding: utf8 -*-

import MySQLdb
import json

# 定義查詢SQL語句
sql = "SELECT id,NAME,LOCAL,mobile,CreateTime FROM db1.s1;"

# 設置列的別名或者直接用表字段名:(下面的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)                        # 執行SQL查詢
data = cur.fetchall()                   # 查詢結果給data。如果執行:print data 顯示結果:((第一行內容),(第二行內容),(第三行內容),(第四行內容))
fields = cur.description               # 獲取查詢結果中列的字段名,如果查詢SQL中使用別名,此處顯示別名。      
cur.close()
conn.close()

# Main
column_list = []                        # 定義字段名的列表
for i in fields:
    column_list.append(i[0])    # 提取字段名,追加到列表中
#print column_list          # 列表顯示結果:['id', 'NAME', 'LOCAL', 'mobile', 'CreateTime']

with open('/data/scripts/logdb/json.txt','w+') as f:  # 打開輸出結果文件
    for row in data:                   # 一次循環,row代表一行,row以元組的形式顯示。
        result = {}                   # 定義Python 字典
        result[column_list[0]] = row[0]          # 將row中的每個元素,追加到字典中。 
        result[column_list[1]] = str(row[1])       # Python字段格式 和json字段格式轉換
        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 --轉換成----> json的object
        f.write(jsondata + '\n')             # 寫入文件
f.close()         

------腳本完結---------------------------

json文件內容:

------顯示結果---------------------------

注意:最后輸出結果,列的順序是隨機的。

  如果想要順序輸出:1.字段起別名,比如:1_xx,2_xx,3_xx.....然后在在json.dumps中利用:sort_keys=True排序,結果就順序輸出。

例如:

  >>> print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)

    {"a": 0, "b": 0, "c": 0}

 

第二部分:json格式--->sql語句

------腳本內容------jsontosql.py--------------

#!/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轉成 Python的dict,追加到Python 列表中, 結果都是unicode格式:[{},{},{},{},{}]
for dict in datalist:
    print dict                     # 打印顯示 轉換后的結果

for dict in datalist:
    dict[u'LOCAL'] = dict[u'LOCAL'].replace('\r\n','\\r\\n').replace("'s","\\'s")  # 將字段中的特殊:回車換行以及's 轉換,方便形成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

-----腳本結果------

-------------------

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM