Створіть таблицю бази даних з 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?

Відповіді:


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();

Нічого не очікував, що це може бути так просто! :) Сподіваюся, що це працює
Фабіан Блешшмідт

Налаштовано, щоб показати, як реєструвати результати, для чого потрібен сценарій настройки даних.
орієнтири

Varien_File_Csv, я знав, що десь там має бути. Я дам це зйомку і оновлю з результатами.
pspahn

Так геніально просто. Ви щойно зробили мою суботу. Дякуємо @benmarks.
pspahn

2
Тут також варто зазначити, що в моїй ситуації у Magento не вистачало пам’яті, коли я додавав додаткові колонки. Два стовпці даних були добре (ледь-ледь), і як тільки я додав третій стовпець і запустив сценарій оновлення, Magento просто провалиться з білою сторінкою і не буде повідомлень / журналів про помилки. Я змушений був розділити свій CSV на кілька файлів, щоб він працював.
pspahn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.