使用python将mySql查询结果转换为json

时间:2017-05-16 12:17:33

标签: python mysql json

我想监视mySql数据库以获取它的性能更新,因此我执行了一个查询show global status;这给了我一个类似Uptime, aborted_connections等的变量列表。

但我想以json格式导出结果,我可以使用python脚本实现吗?

到目前为止,我所做的是,

  1. 将查询结果导出到.csv文件。
  2. 尝试使用以下python代码将该csv文件转换为json
  3.  import csv
    import json
    csvfile = open ('./tempp/op.csv','r')
    jsonfile = open('./tempp/op.json','w')
    fieldnames = ("Variable_name","Value")
    reader = csv.DictReader(csvfile,fieldnames)
    for row in reader:
      json.dump(row,jsonfile)
      jsonfile.write('\n')
    

    的问题:

    1. 上面的脚本没有给出想要的结果。它生成了像
    2. 这样的json
      {"Value": null, "Variable_name": "Variable_name\tValue"}
      {"Value": null, "Variable_name": "Aborted_clients\t0"}
      {"Value": null, "Variable_name": "Aborted_connects\t7"}
      {"Value": null, "Variable_name": "Binlog_cache_disk_use\t0"}
      {"Value": null, "Variable_name": "Binlog_cache_use\t0"}
      {"Value": null, "Variable_name": "Binlog_stmt_cache_disk_use\t0"}
      {"Value": null, "Variable_name": "Binlog_stmt_cache_use\t0"}
      
      1. 这似乎是一种糟糕的方法,首先将结果写入文件,然后从中读取数据。有没有更好的方法直接将结果从mySql查询转换为json对象?
      2. Edit根据答案: 我的op.csv文件如下所示:

        Variable_name   Value
        Aborted_clients 0
        Aborted_connects    7
        Binlog_cache_disk_use   0
        Binlog_cache_use    0
        Binlog_stmt_cache_disk_use  0
        Binlog_stmt_cache_use   0
        Bytes_received  31075
        Bytes_sent  1891186
        Com_admin_commands  445
        Com_assign_to_keycache  0
        Com_alter_db    0
        Com_alter_db_upgrade    0
        

3 个答案:

答案 0 :(得分:2)

试试这个伙伴 -

import csv
import json

rows = []
with open('test.csv', 'r') as f:
    reader = csv.DictReader(f)
    for row in reader:
        rows += [row]

print json.dumps(rows, sort_keys=True, indent=4, separators=(',', ': '))

json.dumps中的参数只是输出格式很好。

因此,输入以下内容 -

Heading1,Heading2,Heading3
Row1Value1,Row1Value2,Row1Value3
Row2Value1,Row2Value2,Row2Value3
Row3Value1,Row3Value2,Row3Value3

你应该得到这个 -

[
    {
        "Heading1": "Row1Value1",
        "Heading2": "Row1Value2",
        "Heading3": "Row1Value3"
    },
    {
        "Heading1": "Row2Value1",
        "Heading2": "Row2Value2",
        "Heading3": "Row2Value3"
    },
    {
        "Heading1": "Row3Value1",
        "Heading2": "Row3Value2",
        "Heading3": "Row3Value3"
    }
]

答案 1 :(得分:1)

Pandas是非常灵活的数据库。您可以在此处下载:LINK

一旦你拥有它:

import pandas as pd
from pandas.io import sql
import sqlite3

conn = sqlite3.connect('example.db')
e = pd.read_sql('select * from my_table;',conn)
b = e.to_json()

print(b)

我正在使用sqlite3,但我认为它对所有sqls都是通用的。

还有函数:pd.read_sql_table直接从表中读取,但是你需要炼金术。

答案 2 :(得分:1)

针对我自己的问题发布解决方案,以帮助此页面的未来访问者:

使用以下脚本将mySql查询输出的结果转换为JSON并将其保存到文件中。

但在此之前安装mySql连接器:

sudo pip install MySQL-python

并使用以下脚本。

import MySQLdb
import json

conn = MySQLdb.connect(host = "localhost", user="root", passwd="your_password_here")

cursor = conn.cursor()
cursor.execute("SHOW GLOBAL STATUS")

rs = cursor.fetchall()

result = dict(rs)

with open('result.json', 'w') as f:
    json.dump(result, f)