복붙노트

[SQL] 어떻게 JSON에 MySQL 데이터베이스를 내보내려면?

SQL

어떻게 JSON에 MySQL 데이터베이스를 내보내려면?

나는 디스크에 JSON 형식의 파일로 MySQL 데이터베이스에서 값의 일부를 수출에 관심이 있습니다.

나는 가능한 방법에 대한 협상이 작업을 수행 할 수있는 링크를 발견 http://www.thomasfrank.se/mysql_to_json.html

내가 그 페이지에서 메서드를 사용할 때 ...하지만,이 일에하지만 두 가지 문제로 보인다

마지막 하나가 갑자기 불완전 (잘린 1) 만 해당), 약 15 결과를 반환합니다. 4000 개 결과 약이 반환에 대한 나의 표준 쿼리 난 그냥 IS NULL을 등록한 학생들, SELECT 이름으로 이메일을 실행할 때 그러나 나는 그것을 같이 실행할 때 :

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

...로 링크에 설명 만 반환 15 개 결과 (내가 언급 한 바와 같이). (FWIW, 내가 얻을되어있어 4000에 대한 결과를 확인하고,이 (15)는 4000의 처음 15과 동일)

2) 내가 INTO OUTFILE '/path/to/jsonoutput.txt이'필드는 해당 쿼리의 끝 ','BY 종료 추가 할 때 실제 파일에 포함 된 "탈출"문자 것 같다. 쉼표는 분명히 나는 ​​\없이 쉼표를 가질 것처럼 때 ', \'처럼 보이는 끝낼 그래서.

MySQL의에서 적절한 JSON 출력을하는 방법에 어떤 아이디어? (하나는 이러한 방법 또는 다른 방법을 사용하여)?

감사!

해결법

  1. ==============================

    1.쿼리에서 직접 잘 형성 JSON을 생산하는 기대 너무 많이 MySQL을 요구 할 수있다. 대신에, (당신이 이미 알고 스 니펫 ','이 INTO OUTFILE '/path/to/output.csv'필드 BY 종료를 사용하여) CSV와 같은 더 편리한 무언가를 생산하는 고려 및 지원에 내장 된 다음의 언어로 JSON으로 결과를 변환 그것을 위해, 파이썬이나 PHP있다.

    쿼리에서 직접 잘 형성 JSON을 생산하는 기대 너무 많이 MySQL을 요구 할 수있다. 대신에, (당신이 이미 알고 스 니펫 ','이 INTO OUTFILE '/path/to/output.csv'필드 BY 종료를 사용하여) CSV와 같은 더 편리한 무언가를 생산하는 고려 및 지원에 내장 된 다음의 언어로 JSON으로 결과를 변환 그것을 위해, 파이썬이나 PHP있다.

    편집 파이썬 예를 들어, 미세의 SQLAlchemy의 사용 :

    class Student(object):
        '''The model, a plain, ol python class'''
        def __init__(self, name, email, enrolled):
            self.name = name
            self.email = email
            self.enrolled = enrolled
    
        def __repr__(self):
            return "<Student(%r, %r)>" % (self.name, self.email)
    
        def make_dict(self):
            return {'name': self.name, 'email': self.email}
    
    
    
    import sqlalchemy
    metadata = sqlalchemy.MetaData()
    students_table = sqlalchemy.Table('students', metadata,
            sqlalchemy.Column('id', sqlalchemy.Integer, primary_key=True),
            sqlalchemy.Column('name', sqlalchemy.String(100)),
            sqlalchemy.Column('email', sqlalchemy.String(100)),
            sqlalchemy.Column('enrolled', sqlalchemy.Date)
        )
    
    # connect the database.  substitute the needed values.
    engine = sqlalchemy.create_engine('mysql://user:pass@host/database')
    
    # if needed, create the table:
    metadata.create_all(engine)
    
    # map the model to the table
    import sqlalchemy.orm
    sqlalchemy.orm.mapper(Student, students_table)
    
    # now you can issue queries against the database using the mapping:
    non_students = engine.query(Student).filter_by(enrolled=None)
    
    # and lets make some json out of it:
    import json
    non_students_dicts = ( student.make_dict() for student in non_students)
    students_json = json.dumps(non_students_dicts)
    
  2. ==============================

    2.루비가있는 경우, 당신은 mysql2xxxx 보석 (안 다른 보석 인 mysql2json 보석을)를 설치할 수 있습니다 :

    루비가있는 경우, 당신은 mysql2xxxx 보석 (안 다른 보석 인 mysql2json 보석을)를 설치할 수 있습니다 :

    $ gem install mysql2xxxx
    

    다음 명령을 실행

    $ mysql2json --user=root --password=password --database=database_name --execute "select * from mytable" >mytable.json
    

    보석은 mysql2csv 및 mysql2xml을 제공합니다. 그것은 mysqldump를의 weirdnesses의 일부에서 고통을하지 않습니다 또한 mysqldump를 최대한 빨리 아니지만 (는 같은 컴퓨터에서 CSV를 덤프 할 수있는 등 MySQL 서버 자체)

  3. ==============================

    3.또 다른 가능성은 MySQL의 워크 벤치를 사용하고 있습니다.

    또 다른 가능성은 MySQL의 워크 벤치를 사용하고 있습니다.

    개체 브라우저 컨텍스트 메뉴에서 그 결과 그리드 메뉴에서 JSON 내보내기 옵션이 있습니다.

    데이터 내보내기 및 가져 오기 : MySQL의 문서에 대한 자세한 정보를 제공합니다.

  4. ==============================

    4.이 애플리케이션 계층에서 수행되어야한다 무언가이다.

    이 애플리케이션 계층에서 수행되어야한다 무언가이다.

    예를 들어, PHP에서 S는 간단한 등은

    편집은 DB 연결 물건을 추가했습니다. 외부 아무것도 필요하지 않습니다.

    $sql = "select ...";
    $db = new PDO ( "mysql:$dbname", $user, $password) ;
    $stmt = $db->prepare($sql);
    $stmt->execute();
    $result = $stmt->fetchAll();
    
    file_put_contents("output.txt", json_encode($result));
    
  5. ==============================

    5.HeidiSQL는 여러분이이 작업을 수행 할 수 있습니다.

    HeidiSQL는 여러분이이 작업을 수행 할 수 있습니다.

    데이터 탭에서 데이터를 강조하거나, 쿼리 결과 집합에 ... 다음 마우스 오른쪽 버튼으로 클릭하고 내보내기 그리드 행 옵션을 선택합니다. 이 옵션은 다음 바로 클립 보드에 직접 파일을, JSON과 같은 데이터 중 하나를 내보낼 수 있습니다 :

  6. ==============================

    6.루비를 사용하는 경우 또 다른 해결책은, 액티브로 데이터베이스에 연결 스크립트를 작성하는 것입니다. 먼저 설치해야합니다

    루비를 사용하는 경우 또 다른 해결책은, 액티브로 데이터베이스에 연결 스크립트를 작성하는 것입니다. 먼저 설치해야합니다

    보석은 액티브 설치

    # ruby ./export-mysql.rb
    require 'rubygems'
    require 'active_record'
    
    ActiveRecord::Base.establish_connection(
      :adapter => "mysql",
      :database => "database_name",
      :username => "root",
      :password => "",
      :host => "localhost"
    )
    
    class Event < ActiveRecord::Base; end
    class Person < ActiveRecord::Base; end
    
    File.open("events.json", "w") { |f| f.write Event.all.to_json }
    File.open("people.json", "w") { |f| f.write Person.all.to_json }
    

    먼저 데이터를 조작 할 또는 포함하거나 특정 열을 제외하면 당신은 또한 액티브 클래스에 메소드를 추가 할 수 있습니다.

    Person.all.to_json(:only => [ :id, :name ])
    

    액티브하면 JSON에 한정되는 것은 아니다. 당신은 쉽게 XML이나 YAML로 내보낼 수 있습니다

    Person.all.to_xml
    Person.all.to_yaml
    

    당신은 MySQL로 한정되는 것은 아니다. 액티브 (포스트 그레스, sqlite3를, 오라클 ... 등)을 지원하는 모든 데이터베이스.

    그리고 그것의 가치는 데이터베이스에 다른 핸들을 열 수 언급

    require 'active_record'
    
    ActiveRecord::Base.configurations["mysql"] = {
      :adapter  => 'mysql',
      :database => 'database_name',
      :username => 'root',
      :password => '',
      :host     => 'localhost'
    }
    
    
    ActiveRecord::Base.configurations["sqlite3"] = {
      :adapter  => 'sqlite3',
      :database => 'db/development.sqlite3'
    }
    
    class PersonMySQL < ActiveRecord::Base
      establish_connection "mysql"
    end
    
    class PersonSQLite < ActiveRecord::Base
      establish_connection "sqlite3"
    end
    
    
    PersonMySQL.all.each do |person|
        PersonSQLite.create(person.attributes.except("id"))
    end
    

    여기에 대한 빠른 작은 블로그 게시물은 http://www.seanbehan.com/how-to-export-a-mysql-database-to-json-csv-and-xml-with-ruby-and-the-activerecord -보석

  7. ==============================

    7.나는 이것이 오래 알고 있지만, 누군가를 위해 대답을 찾고 ...

    나는 이것이 오래 알고 있지만, 누군가를 위해 대답을 찾고 ...

    당신은 당신의 서버에 대한 루트 액세스 권한이 편안 설치 플러그인 (그것의 단순) 할 필요가 여기에서 찾을 수 있습니다 MYSQL에 대한 JSON 라이브러리가있다.

    1) MySQL 설치의 플러그인 디렉토리에 lib_mysqludf_json.so을 업로드

    2)이 꽤 많이 당신을 위해 모든 작업을 수행합니다 (lib_mysqludf_json.sql 파일을 실행합니다. 당신이 곤경에 바로 삭제 아무것도 실행하면 그와 시작 'DROP 기능 ...')

    3) 이런 일에 검색어를 인코딩 :

    SELECT json_array(
             group_concat(json_object( name, email))
    FROM ....
    WHERE ...
    

    그리고 같은를 반환합니다

    [ 
       { 
         "name": "something",
         "email": "someone@somewhere.net"
        }, 
       { 
         "name": "someone",
         "email": "something@someplace.com"
        }
    
    ]
    
  8. ==============================

    8.당신은 phpMyAdmin을 직접 JSON으로 모든 SQL 쿼리를 내보낼 수 있습니다

    당신은 phpMyAdmin을 직접 JSON으로 모든 SQL 쿼리를 내보낼 수 있습니다

  9. ==============================

    9.즉, MySQL은 그것이 지금까지이라도 어떤이가 절단 금액과 수익률에 도달 한 빨리 group_concat_max_len에 @@ 값 세트에 그룹 CONCAT에 의해 반환 된 데이터의 길이를 제한합니다. 때문에

    즉, MySQL은 그것이 지금까지이라도 어떤이가 절단 금액과 수익률에 도달 한 빨리 group_concat_max_len에 @@ 값 세트에 그룹 CONCAT에 의해 반환 된 데이터의 길이를 제한합니다. 때문에

    당신은 설정할 수 있습니다 @@ 몇 가지 방법으로 group_concat_max_len. MySQL의 설명서를 참조 ...

  10. ==============================

    10.또한, 당신은 응용 프로그램 계층에 내보내는 경우 결과를 제한하는 것을 잊지 마세요. 당신이 10M 행을 한 경우 예를 들어, 일부에 의해 결과의 일부를 얻어야한다.

    또한, 당신은 응용 프로그램 계층에 내보내는 경우 결과를 제한하는 것을 잊지 마세요. 당신이 10M 행을 한 경우 예를 들어, 일부에 의해 결과의 일부를 얻어야한다.

  11. ==============================

    11.MySQL의 셸을 사용하여 아웃 전용 터미널 사용하여 JSON에 직접 넣을 수 있습니다

    MySQL의 셸을 사용하여 아웃 전용 터미널 사용하여 JSON에 직접 넣을 수 있습니다

    echo "Your SQL query" | mysqlsh --sql --result-format=json --uri=[username]@localhost/[schema_name]
    
  12. ==============================

    12.다음 루비 코드를 사용하여

    다음 루비 코드를 사용하여

    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
    }
    
  13. ==============================

    13.파이썬을 사용하여이 작업을 수행, 등 필드 이름을 predefinining없이 모든 테이블을 내보낼 수 원하는 사람을 위해, 나는이 다른 일에 대한 간단한 스크립트를 작성, 희망 누군가가 유용 발견 :

    파이썬을 사용하여이 작업을 수행, 등 필드 이름을 predefinining없이 모든 테이블을 내보낼 수 원하는 사람을 위해, 나는이 다른 일에 대한 간단한 스크립트를 작성, 희망 누군가가 유용 발견 :

    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))
    
  14. ==============================

    14.이것은 더 많은 틈새 해답이 될 수 있지만 당신은 창문에 있으며 MYSQL 워크 벤치 경우 당신은 당신이 원하는 테이블을 선택하고 결과 그리드에서 내보내기 / 가져 오기를 클릭 할 수 있습니다. 이렇게하면 .json 등 다양한 포맷 옵션을 제공합니다

    이것은 더 많은 틈새 해답이 될 수 있지만 당신은 창문에 있으며 MYSQL 워크 벤치 경우 당신은 당신이 원하는 테이블을 선택하고 결과 그리드에서 내보내기 / 가져 오기를 클릭 할 수 있습니다. 이렇게하면 .json 등 다양한 포맷 옵션을 제공합니다

  15. from https://stackoverflow.com/questions/5036605/how-to-export-a-mysql-database-to-json by cc-by-sa and MIT license