将数据从 Mysql 导出为 CSV 格式

时间:2021-07-03 17:46:40

标签: mysql sql

我正在尝试从数据集生成随机样本,并使用 Mac 计算机上的 Mysql 工作台将文件存储在 csv 中。我的代码如下:

    <Slider {...settings}>
  {sliderData.map((slide, index) => {
    return (
      <div
        className='TeamSlider'
        key={index}
        style={{ height: '185px !important' }}
      >
        <img src={slide.image} alt='slider' key={index} />
      </div>
    )
  })}
</Slider>

未使用此脚本创建 csv 文件。

我错过了什么?

2 个答案:

答案 0 :(得分:0)

你有一个不属于那里的 UNION

SELECT 'col1', 'col2', 'col3', 'col4', 'col5'
INTO OUTFILE '/Users/Jim/Notebook/artest.csv' 
 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"', ESCAPED BY '\' LINES TERMINATED BY '\n'
FROM information_schema.columns 
WHERE table_schema = 'ar_state_nurses_salaries' 
AND table_name =   'ar_state_nurses_salaries.ar_state_nurses_salaries'
ORDER BY RAND(5)
LIMIT 1;

答案 1 :(得分:0)

你问题的代码有点奇怪。 information_schema.COLUMNS 表包含其他表中列的描述。我不认为这是你想要的。

我相信你想要的结果集,没有标题,可以这样检索。

SELECT *
  FROM ar_state_nurses_salaries
 ORDER BY RAND()
 LIMIT 50

然后,您可以像这样导出。

SELECT *
    INTO OUTFILE '/Users/Jim/Notebook/artest.csv' 
    FIELDS TERMINATED BY ',' 
    OPTIONALLY ENCLOSED BY '"' 
    ESCAPED BY '\' 
    LINES TERMINATED BY '\n'   
  FROM (
          SELECT *
            FROM ar_state_nurses_salaries
           ORDER BY RAND()
           LIMIT 50
       ) results

请注意我如何将您的数据选择放入子查询中。那是因为您想将标题放在导出的文件中。这样做。

SELECT *
    INTO OUTFILE '/Users/Jim/Notebook/artest.csv' 
    FIELDS TERMINATED BY ',' 
    OPTIONALLY ENCLOSED BY '"' 
    ESCAPED BY '\' 
    LINES TERMINATED BY '\n'   
  FROM (
          SELECT 'col1', 'col2', 'col3', 'col4', 'col5'
          UNION ALL
          SELECT *
            FROM ar_state_nurses_salaries
           ORDER BY RAND()
           LIMIT 50
       ) results

(不要在这里使用 UNION,因为 UNION 做了很多工作来去重行。UNION ALL 跳过了这项工作。)

但这可能不起作用:当您使用任何类型的 UNION 时,联合的每一列在整个结果中都必须具有相同的数据类型。因此,如果您的表格的第一列是人名,那就行了。您将获得一堆名称,第一个名称,即您的 CSV 列标题,将是 col1。它们都是文本字符串。但是,如果第二个数字是工资数字就行不通了,因为 'col2' 是一个字符串,而该列的其余部分是数字。

(这是一个臭名昭著的将 MySQL 数据导出到文件时的 xxx 脖子痛。)