Как экспортировать базу данных MySQL в JSON? - PullRequest
48 голосов
/ 18 февраля 2011

Я заинтересован в экспорте подмножества значений из базы данных MySQL в файл в формате JSON на диске.

Я нашел ссылку, которая говорит о возможном способе сделать это: http://www.thomasfrank.se/mysql_to_json.html

... но когда я использую метод с этой страницы, он работает, но с двумя проблемами:

1) Возвращает только около 15 результатов, последний из которых резко обрезается (не завершен). Мой стандартный запрос на это возвращает около 4000 результатов, когда я просто запускаю его как SELECT name, email FROM students WHERE enrolled IS NULL Но когда я запускаю его как:

SELECT 
     CONCAT("[",
          GROUP_CONCAT(
               CONCAT("{name:'",name,"'"),
               CONCAT(",email:'",email,"'}")
          )
     ,"]") 
AS json FROM students WHERE enrolled IS NULL;

... как описано в ссылке, он возвращает только (как я уже говорил) 15 результатов. (Между прочим, я проверил эти результаты против 4000, которые я должен получить, и эти 15 совпадают с первыми 15 из 4000)

2) Кажется, в настоящий файл включены «escape» символы, когда я добавляю INTO OUTFILE '/path/to/jsonoutput.txt' FIELDS TERMINATED BY ',' в конец этого запроса. Таким образом, запятые в конечном итоге выглядят как '\', когда, очевидно, я просто хотел бы получить запятые без \.

Любые идеи о том, как получить правильный вывод JSON из MySQL? (Либо с помощью этого метода, либо каким-либо другим методом)?

Спасибо!

Ответы [ 13 ]

0 голосов
/ 01 августа 2017

Это может быть более нишевой ответ, но если вы работаете в Windows и MYSQL Workbench, вы можете просто выбрать нужную таблицу и нажать «Экспорт / импорт» в сетке результатов.Это даст вам несколько вариантов формата, включая .json

0 голосов
/ 09 мая 2016

Для тех, кто хочет сделать это с помощью Python и иметь возможность экспортировать все таблицы без предопределенных имен полей и т. Д., Я написал короткий сценарий для этого на днях, надеюсь, кто-то найдет его полезным:

from contextlib import closing
from datetime import datetime
import json
import MySQLdb
DB_NAME = 'x'
DB_USER = 'y'
DB_PASS = 'z'

def get_tables(cursor):
    cursor.execute('SHOW tables')
    return [r[0] for r in cursor.fetchall()] 

def get_rows_as_dicts(cursor, table):
    cursor.execute('select * from {}'.format(table))
    columns = [d[0] for d in cursor.description]
    return [dict(zip(columns, row)) for row in cursor.fetchall()]

def dump_date(thing):
    if isinstance(thing, datetime):
        return thing.isoformat()
    return str(thing)


with closing(MySQLdb.connect(user=DB_USER, passwd=DB_PASS, db=DB_NAME)) as conn, closing(conn.cursor()) as cursor:
    dump = {}
    for table in get_tables(cursor):
        dump[table] = get_rows_as_dicts(cursor, table)
    print(json.dumps(dump, default=dump_date, indent=2))
0 голосов
/ 04 августа 2014

Используйте следующий код рубина

require 'mysql2'

client = Mysql2::Client.new(
  :host => 'your_host', `enter code here`
  :database => 'your_database',
  :username => 'your_username', 
  :password => 'your_password')
table_sql = "show tables"
tables = client.query(table_sql, :as => :array)

open('_output.json', 'a') { |f|       
    tables.each do |table|
        sql = "select * from `#{table.first}`"
        res = client.query(sql, :as => :json)
        f.puts res.to_a.join(",") + "\n"
    end
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...