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

15

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

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

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

Я использую методы 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?

pspahn
источник

Ответы:

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();
benmarks
источник
Вау, я не ожидал, что это может быть так просто! :) Надеюсь, что это работает
Фабиан Блехшмидт
Настраивается, чтобы показать, как регистрировать результаты, для чего требуется скрипт настройки данных.
отметки
Varien_File_Csv, я знал, что это должно быть где-то там. Я дам это выстрел и обновлю с результатами.
pspahn
Так гениально просто. Вы только что сделали мою субботу. Спасибо @benmarks.
pspahn
2
Также стоит отметить, что в моей ситуации Magento не хватало памяти, когда я добавил дополнительные столбцы. Два столбца данных были в порядке (просто еле), и как только я добавил третий столбец и запустил скрипт обновления, Magento просто потерпел бы неудачу с белой страницей и без сообщений об ошибках / журналов. Я был вынужден разбить мой CSV на несколько файлов, чтобы заставить его работать.
pspahn