Создать таблицу базы данных из CSV
Вопрос
Я работаю над модулем, который требует доступа к некоторым табличным данным, предоставленным из внешнего источника. Это всего лишь два столбца, но имеет примерно 40000 строк.
В настоящее время мой модуль просто анализирует CSV полностью при необходимости. Это работает хорошо, но, поскольку файл составляет около 450 КБ, это будет съесть ресурсы сервера после развертывания на производственный сайт.
Я хотел бы перенести эти данные в таблицу Magento, и у меня проблемы.
Я использую методы RDBMS в моем сценарии настройки, ALA:
$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();