我感兴趣的是将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个结果.(fwiw,我将这些结果与我应该得到的4000个结果进行了对比,这15个结果与4000个结果中的前15个相同)

2) 当我在该查询的末尾添加INTO OUTFILE '/path/to/jsonoutput.txt' FIELDS TERMINATED BY ','时,实际文件中似乎包含了"转义"字符.所以逗号最后看起来像"\",显然我只希望逗号没有\.

有没有关于如何从MySQL获得正确的JSON输出的 idea ?(使用此方法或其他方法)?

谢谢

推荐答案

它对MySQL的要求可能太高了,以至于无法直接从查询中生成格式良好的json.相反,考虑生成更方便的东西,比如CSV(使用你已经知道的INTO OUTFILE '/path/to/output.csv' FIELDS TERMINATED BY ','个片段),然后将结果转化为JSON,支持内置的语言,如Python或PHP.

Edit python示例,使用精细的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)

Mysql相关问答推荐

根据键的数量,SQL Json字段分为行

如何获得表中只有最大值行的一个列被另一个列分区?

了解查询中ORDER BY的行为

MySQL多连接以获得单个结果集(使用MySQL max函数)

在停靠容器中备份和恢复MySQL数据库时出现Unicode字符问题

MySQL Group by或Distinct in Window函数

Mysql - Select 匹配某些条件的两条记录之间经过的最大天数

如何在 mysql 中获取 Day Wise 的平均值?

从 R 脚本创建新的 MYSQL 数据库

谁能帮我优化where子句

带有 PARTITION BY 子句的 ROW_NUMBER() 停止在 MariaDB 上工作

即使使用索引,MySQL 计数和按查询分组也很慢

创建将列与多个值进行比较的索引

当查询 MySQL 的 goroutine 过多时,Go 会出现panic

MySql查询无结果

MySQL函数查找两个日期之间的工作日数

PDO:MySQL 服务器已消失

将 MySQL 数据库置于版本控制之下?

PHP mySQL - 将新记录插入表中,主键自动递增

MySQL DAYOFWEEK() - 我的一周从星期一开始