Utwórz tabelę bazy danych z CSV

15

Pracuję nad modułem, który wymaga dostępu do niektórych danych tabelarycznych dostarczonych z zewnętrznego źródła. To tylko dwie kolumny, ale ma około 40000 wierszy.

Obecnie mój moduł tylko analizuje plik CSV w razie potrzeby. Działa to dobrze, ale ponieważ plik ma rozmiar około 450 KB, zużyje zasoby serwera po wdrożeniu w witrynie produkcyjnej.

Chciałbym przenieść te dane do tabeli Magento i mam problem.

Korzystam z metod RDBMS w skrypcie instalacyjnym, między innymi:

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

To działa dobrze, aby utworzyć moją tabelę, ale w rzeczywistości wprowadzanie moich danych marnieje w głowie (wciąż jestem nieobliczalny, jeśli chodzi o zarządzanie bazą danych).

Idealnie byłoby po prostu przeanalizować mój plik CSV i wstawić wartości do tabeli bez konieczności radzenia sobie z wiązką kopiowania / wklejania.

Czy są jakieś wbudowane metody obsługi dowolnych danych CSV, czy też wszystkie są zbudowane tak, aby obsłużyć tylko to, czego potrzebują? Jakie byłoby najlepsze podejście do przeniesienia moich danych do Magento?

pspahn
źródło

Odpowiedzi:

15

Nigdy tego nie zrobiłem. Zagrajmy!

Po createTable()wywołaniu lub w kolejnym skrypcie:

/* @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();
zalety
źródło
wow nie spodziewałem się, że to może być takie proste! :) Mam nadzieję, że to
zadziała
Dostosowano, aby pokazać, jak rejestrować wyniki, co wymaga skryptu konfiguracji danych.
zyskuje
Varien_File_Csv, wiedziałem, że musi gdzieś tam być. Dam temu szansę i zaktualizuję wyniki.
pspahn
Tak genialnie proste. Właśnie zrobiłeś moją sobotę. Dzięki @benmarks.
pspahn
2
Warto również zauważyć, że w mojej sytuacji Magento zabrakło pamięci, gdy dodałem dodatkowe kolumny. Dwie kolumny danych były w porządku (ledwo) i jak tylko dodałem trzecią kolumnę i uruchomiłem skrypt aktualizacji, Magento po prostu zawiódł z białą stroną i brakiem komunikatów o błędach / dzienników. Byłem zmuszony podzielić mój plik CSV na wiele plików, aby go uruchomić.
pspahn