Создание таблицы базы данных из CSV


Я работаю над модулем, который требует доступа к некоторым табличным данным, предоставленным из внешнего источника. Это всего два столбца, но содержит примерно 40000 строк.

В настоящее время мой модуль просто анализирует CSV полностью, когда это необходимо. Это хорошо работает, но так как размер файла составляет около 450 Кб, это будет потреблять ресурсы сервера после развертывания на производственном сайте.

Я хотел бы переместить эти данные в таблицу Magento, и у меня возникли проблемы.

Я использую Методы СУБД в моем сценарии установки, 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?

Author: Aasim Goriya, 2013-01-26

1 answers

Никогда этого не делал. Давайте поиграем!

После вызова 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();
 16
Author: benmarks, 2013-01-26 15:52:29