题
我正在研究一个模块,该模块需要访问来自外部源提供的一些表格数据。它只有两列,但大约有40000行。
目前,我的模块只是在必要时全部分析CSV。这效果很好,但是由于该文件约为450KB,因此一旦部署到生产站点就会吃掉服务器资源。
我想将这些数据移至洋红色桌子上,并遇到麻烦。
我在设置脚本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的最佳方法是什么?
解决方案
从来没有这样做。让我们玩!
之后 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();