相关疑难解决方法(0)

MySQL导出到outfile:CSV转义字符

我有一个包含一些常见字段的时间表数据库表.

id, client_id, project_id, task_id, description, time, date 
Run Code Online (Sandbox Code Playgroud)

还有更多,但这就是它的要点.

我在该表上运行导出过夜的CSV文件,以便为用户提供其数据的备份.它还用作带有一些自定义报告的宏Excel文件的数据导入.

这一切都与我一起使用php循环遍历时间表并将行打印到文件.

问题在于大型数据库可能需要数小时才能运行,这是不可接受的.所以我用MySQL INTO OUTFILE命令重新编写它,它将它减少到几秒钟才能运行,这很棒.

现在的问题是我似乎无法在描述字段中转义所有新行字符等.实际上,用户可以在此输入任何字符组合,包括回车/新行.

这是我的MySQL代码的片段:

SELECT id, 
       client,
       project,
       task,
       REPLACE(REPLACE(ifnull(ts.description,''),'\n',' '),'\r',' ') AS description, 
       time,
       date  
      INTO OUTFILE '/path/to/file.csv'
      FIELDS ESCAPED BY '""'
      TERMINATED BY ',' ENCLOSED BY '"'
      LINES TERMINATED BY '\n'
      FROM ....
Run Code Online (Sandbox Code Playgroud)

但...

当我尝试查看输出文件的来源时,文件中仍然存在换行符,因此Excel的CSV导入会破坏Excel向导创建的所有奇特的宏和数据透视表.

关于最佳行动方案的任何想法?

mysql sql excel into-outfile

43
推荐指数
2
解决办法
14万
查看次数

MySQL - SELECT*INTO OUTFILE LOCAL?

MySQL太棒了!我目前正在参与主要的服务器迁移,之前,我们的小型数据库曾经与客户端托管在同一台服务器上.
所以我们习惯这样做:SELECT * INTO OUTFILE .... LOAD DATA INFILE ....

现在,我们将数据库移动到另一台服务器,SELECT * INTO OUTFILE ....不再有效,可以理解 - 我相信安全原因.但是,有趣的LOAD DATA INFILE ....是可以改为LOAD DATA LOCAL INFILE ....和bam,它有效.

我不是抱怨,也不是我对MySQL的厌恶.替代方案增加了2行额外代码和系统调用形成.sql脚本.所有我想知道的是为什么LOAD DATA LOCAL INFILE有效,为什么没有这样的东西SELECT INTO OUTFILE LOCAL

我完成了我的作业,找不到上述问题的直接答案.我找不到@MySQL的功能请求.如果有人能够清除它,那就太棒了!

MariaDB能够处理这个问题吗?

mysql sql mariadb into-outfile

41
推荐指数
3
解决办法
10万
查看次数

基于来自phpMyAdmin的MySQL查询生成CSV

我可以根据MySQL查询从phpMyAdmin生成CSV文件吗?

例如,假设我查询了一个表以返回单词"image"的结果.我可以生成一个包含"image"一词的所有记录的CSV吗?

mysql csv phpmyadmin

31
推荐指数
3
解决办法
4万
查看次数

如何以csv格式输出MySQL查询结果(到屏幕,而不是文件)?

我正在尝试使用mysql命令行工具以逗号分隔格式输出查询结果.我的mysql用户无权使用此问题中引用的"INTO OUTFILE"选项:

如何以CSV格式输出MySQL查询结果?

我也知道分别在html和xml中格式化输出的-H和-X选项,但是没有办法直接将csv格式输出到屏幕上吗?

我发现这个方法使用sed - http://tlug.dnho.net/?q=node/209.但是,我很想找到一个直接的mysql解决方案.

有任何想法吗?

mysql csv

26
推荐指数
2
解决办法
5万
查看次数

MySQL查询将输出打印为CSV到标准输出

我想做以下事情 mysql -uuser -ppass -h remote.host.tld database < script.sql

其中script.sql包含以下内容

SELECT *
FROM webrecord_wr25mfz_20101011_175524
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n'
Run Code Online (Sandbox Code Playgroud)

我希望CSV输出指向标准输出.原因是因为使用an运行此查询INTO OUTFILE 'blah.csv'将保存远程主机上的文件.我希望文件保存在本地主机上.

如果我可以将标准输出重定向到文件,那将是花花公子.

mysql sql into-outfile

13
推荐指数
2
解决办法
6194
查看次数

MySQL查询到CSV

有没有一种简单的方法从命令行运行MySQL查询linux并以csv格式输出结果?

这就是我现在正在做的事情:

mysql -u uid -ppwd -D dbname << EOQ | sed -e 's/        /,/g' | tee
list.csv select id, concat("\"",name,"\"") as name from students EOQ
Run Code Online (Sandbox Code Playgroud)

当有很多列需​​要用引号括起来,或者结果中有引号需要转义时,它会变得混乱.

mysql sql csv

10
推荐指数
1
解决办法
4万
查看次数

使用 php 将 20k 或更多记录从 MY SQL 导出到 CSV

我正在尝试将大约 20k 条记录从 mysql 中的一个表导出到 csv,正如预期的那样,它使我的系统崩溃,是否有其他方法可以避免崩溃?

这是我当前的导出代码:

$filename2 = "csv/leads_".date("M-d-Y",time()).".csv";
            $fp2 = fopen($filename2, 'w') or die("can't open file");

            $sql2 = $sql_getcustomers;
            $res2 = mysql_query($sql2);

            // fetch a row and write the column names out to the file
            $row2 = mysql_fetch_assoc($res2);
            $line = "";
            $comma = "";
            if($row2){
                foreach($row2 as $name => $value) {
                    $line .= $comma . '"' . str_replace('"', '""', $name) . '"';
                    $comma = ",";
                }

                $line .= ",crm_group";
                $line .= "\n";
                fwrite($fp2, $line);

                // remove the result …
Run Code Online (Sandbox Code Playgroud)

php csv export export-to-csv

5
推荐指数
1
解决办法
793
查看次数

如何将制表符分隔值(TSV)文件转换为BASH中的逗号分隔值(CSV)文件?

我有一些TSV文件,我需要转换为CSV文件.BASH中是否有任何解决方案,例如使用awk,转换这些?我可以sed像这样使用,但我担心它会犯一些错误:

sed 's/\t/,/g' file.tsv > file.csv
Run Code Online (Sandbox Code Playgroud)
  • 不需要添加引号.

如何将TSV转换为CSV?

csv bash awk tsv

5
推荐指数
1
解决办法
1万
查看次数

如何将 MySQL CLI 查询输出转换为 CSV

世界另一端的一位同事以文本格式向我发送了 MySQL CLI 客户端查询的一些输出。她无法为我将其转换为 CSV,也无法使用INTO OUTFILE输出标志直接输出为 CSV。如何将其转换为 CSV 格式?它看起来像这样:

+-------------+------------------+------------------------------------------+-------------+
| pet_id      | pet_identity_id  | identity_value                           | pet_species |
+-------------+------------------+------------------------------------------+-------------+
|       77626 |          3140819 | dominic_dog@example.com                  | dog         |
|       77625 |          3140818 | missy_miauw@example.com                  | cat         |
|       77622 |          3140815 | shelly@example.com                       | aardvark    |
|       77583 |          3140776 | monster_moo@example.com                  | cow         |
+-------------+------------------+------------------------------------------+-------------+
4 rows in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像这样的 CSV 格式(管道或逗号分隔):

"pet_id"|"pet_identity_id"|"identity_value"|"pet_species"
77626|3140819|"dominic_dog@example.com"|"dog"
77625|3140818|"missy_miauw@example.com"|"cat"
77622|3140815|"shelly@example.com"|"aardvark"
77583|3140776|"monster_moo@example.com"|"cow"
Run Code Online (Sandbox Code Playgroud)

我发现了各种问题,可以让您使用符号在 CLI 客户端中执行此操作INTO OUTFILE,但没有什么可以仅将某人发送给您的查询示例转换为您在 MySQL …

mysql sql csv sed converters

5
推荐指数
1
解决办法
1117
查看次数

mysql分隔符问题

我该怎么做呢:

mysql -u myuser -p mydb -e "select f1,f2 from  mytable" > /tmp/mydata.txt
Run Code Online (Sandbox Code Playgroud)

但我想用逗号分隔字段.

mysql --delimiter=, -u myuser -p mydb -e "select f1,f2 from  mytable" > /tmp/mydata.txt
Run Code Online (Sandbox Code Playgroud)

不起作用:(

mysql

3
推荐指数
1
解决办法
2万
查看次数

rails - 导出巨大的CSV文件会占用生产中的所有RAM

所以我的应用程序导出了一个11.5 MB的CSV文件,并且基本上使用了所有永远不会被释放的RAM.

CSV的数据来自数据库,在上面提到的情况下,整个数据都被导出.

我以下列方式使用Ruby 2.4.1标准CSV库:

export_helper.rb:

CSV.open('full_report.csv', 'wb', encoding: UTF-8) do |file|
  data = Model.scope1(param).scope2(param).includes(:model1, :model2)
  data.each do |item|
    file << [
      item.method1,
      item.method2,
      item.methid3
    ]
  end
  # repeat for other models - approx. 5 other similar loops
end
Run Code Online (Sandbox Code Playgroud)

然后在控制器中:

generator = ExportHelper::ReportGenerator.new
generator.full_report
respond_to do |format|
  format.csv do
    send_file(
      "#{Rails.root}/full_report.csv",
      filename: 'full_report.csv',
      type: :csv,
      disposition: :attachment
    )
  end
end
Run Code Online (Sandbox Code Playgroud)

在一次请求之后,puma进程加载了整个服务器RAM的55%并保持这样,直到最终完全耗尽内存.

例如,在本文中,生成一百万行75 MB CSV文件只需要1 MB RAM.但是没有涉及DB查询.

服务器有1015 MB RAM + 400 MB交换内存.

所以我的问题是:

  • 究竟消耗了如此多的记忆?是CSV生成还是与DB通信?
  • 我做错了什么,错过了内存泄漏?或者只是图书馆的运作方式?
  • 有没有办法释放内存而不重启puma工作者?

提前致谢!

csv ruby-on-rails ruby-on-rails-5

3
推荐指数
1
解决办法
496
查看次数