• 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 + ' ')             # 写入文件
    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').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

    -----脚本结果------

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

  • 相关阅读:
    面试题目整理(MySQL系列-调优)
    面试题目整理(MySQL系列-事务)
    面试题目整理(MySQL系列-索引)
    MySQL遇到问题
    Gorm的高级用法
    Gorm的初步使用(使用频率排序)
    MySQL索引详解
    SSH命令行上传/下载文件
    SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8mb4_unicode_ci,COERCIBLE) for operation 'like' 。。。
    Redis 缓存穿透、缓存雪崩、缓存击穿解决方案
  • 原文地址:https://www.cnblogs.com/cuisi/p/6296224.html
Copyright © 2020-2023  润新知