使用 csv_from_result 在 CSV 导出中返回字符串而不是数据库条目

Posted

技术标签:

【中文标题】使用 csv_from_result 在 CSV 导出中返回字符串而不是数据库条目【英文标题】:Return string rather than database entry in CSV export using csv_from_result 【发布时间】:2014-04-27 08:11:13 【问题描述】:

我正在使用 codeigniter 从数据库条目生成 CSV。以下代码有效

$this->load->dbutil();
$csv = $this->dbutil->csv_from_result($stories);
echo $csv;

$name = 'data.csv';

// Build the headers to push out the file properly.
header('Pragma: public');     // required
header('Expires: 0');         // no cache
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private',false);
header('Content-Disposition: attachment; filename="'.basename($name).'"');  // Add the file name
header('Content-Transfer-Encoding: binary');
header('Connection: close');
exit();

force_download($name, $csv);
fclose($fp);

但是,我有两个问题。

1) 为什么我的代码依赖于回显 $CSV?如果我注释掉这一行,它会返回一个空白的 cvs。

2) 如何获取 $CSV 变量并对其进行编辑。目前,我的数据库将一些信息存储为整数,控制器在站点的正常运行中将其转换为字符串,即我可能将数据库中的优先级存储为 0、1、2,但在视图中我显示紧急、高、低。我想在导出的 CSV 而不是数据库条目中显示这些字符串。我对如何做到这一点有点困惑。我正在考虑一个带有 switch 语句的循环,但我真的不知道如何与 $CSV 变量交互 - 或者我应该在数据仍在对象中而不是 csv_from_result() 的模型中执行此操作

【问题讨论】:

【参考方案1】:

1) $csv 包含所有信息,它是构成文件的所有内容。这就是为什么如果你不回显它,你只会得到一个空白的 CSV 文件。

2) 您不想编辑$csv,该变量包含所有准备就绪的内容。您想编辑$stories,从上面粘贴的内容来看,它包含数据库中的所有内容,然后由$this->dbutil->csv_from_result 转换为CSV。查看您的代码并找到 $stories 的加载位置,然后对其进行修改。

【讨论】:

1.我知道 $CSV 包含所有信息,只是想知道为什么我需要回显它,而不仅仅是将其打印到浏览器。我是否需要这样做,因为我正在流式传输到浏览器或其他东西? 2. $stories 只是数据库查询的结果对象,但你说得对,这是我应该看的部分。不知道我是怎么错过的。 @Drdavidpier 实际上,您正在做的是创建一个新页面,只有一堆不同的标题告诉浏览器将其作为 CSV 文件处理并从服务器下载。但是如果没有向页面回显任何内容,浏览器就没有什么可以下载的了。 嗯,有道理。谢谢!

以上是关于使用 csv_from_result 在 CSV 导出中返回字符串而不是数据库条目的主要内容,如果未能解决你的问题,请参考以下文章

使用 spark-csv 在 zeppelin 中读取 csv 文件

使用 Pandas 在选项卡中的单个 csv 表中添加多个 csv

csv文件怎么打开 csv文件打开步骤

如何使用 csv.DictReader 在 django 中上传和读取 csv 文件?

如何在 pyspark 中使用 df.write.csv 附加到 csv 文件?

如何在使用 pandas 读取 csv 文件时删除特定列?