从CSV创建数据库表


15

我正在开发一个模块,该模块需要访问从外部源提供的某些表格数据。它只有两列,但大约有40000行。

当前,我的模块只是在必要时完全解析CSV。这很好用,但是由于文件约为450Kb,一旦部署到生产站点,这将消耗服务器资源。

我想将此数据移到Magento表中,遇到了麻烦。

我在安装脚本ala中使用RDBMS方法:

$installer = $this;
$installer->startSetup();

$table = $installer->getConnection()
    ->newTable($installer->getTable('my_table'))
    ->addColumn('column_a', Varien_Db_Ddl_Table::TYPE_TEXT, 5, array(
        'nullable' => false,
        ), 'Column A')
    ->addColumn('column_b', Varien_Db_Ddl_Table::TYPE_TEXT, 3, array(
        'nullable' => false,
        ), 'Column B');

$installer->getConnection()->createTable($table);

$installer->endSetup();

这对于创建表是很好的方法,但是实际上获取我的数据真是令人费解(在数据库管理方面,我仍然是菜鸟。)

理想情况下,我只解析我的CSV文件并将值插入表中,而不必处理大量的复制/粘贴操作。

是否有用于处理任意CSV数据的内置方法,或者它们全都可以处理所需的内容?将数据导入Magento的最佳方法是什么?

Answers:


15

从来没有这样做。让我们玩!

在之后createTable()的呼叫,或者在随后的脚本:

/* @var $installer Mage_Core_Model_Resource_Setup */
$installer = $this;
$installer->startSetup();

//Extract data from CSV file
$csv = new Varien_File_Csv;
$data = $csv->getData('path/to/file.csv');

$resultNum = $installer->getConnection()->insertArray(
    $installer->getTable({TABLE NAME}),
    array({COL 1},{COL 2}),    //column names
    $data
);

//EDIT: if this is done using a data setup script, can even log the results:
Mage::log(
    __FILE__." added $resultNum records to $installer->getTable({TABLE NAME})",
    Zend_Log::INFO,
    "setup.log",
    true
);

$installer->endSetup();

没想到,这可能是如此简单!:)希望这项工作有效
Fabian Blechschmidt 2013年

调整以显示如何记录结果,这需要数据设置脚本。
benmarks 2013年

Varien_File_Csv,我知道它必须在某个地方。我会试一试并更新结果。
pspahn

如此简单。你刚做我的星期六。谢谢@benmarks。
pspahn

2
同样值得注意的是,在我的情况下,当我添加其他列时,Magento的内存不足。两列数据都很好(几乎没有),而当我添加第三列并运行升级脚本时,Magento只会失败,出现白色页面,并且没有错误消息/日志。我被迫将CSV拆分为多个文件才能正常工作。
pspahn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.