Crea una tabella di database da CSV


15

Sto lavorando su un modulo che richiede l'accesso ad alcuni dati tabulari forniti da una fonte esterna. Sono solo due colonne ma ha circa 40000 righe.

Attualmente, il mio modulo sta analizzando il CSV per intero quando necessario. Funziona bene, ma poiché il file è di circa 450 KB, questo consumerà risorse server una volta distribuito in un sito di produzione.

Vorrei spostare questi dati in una tabella Magento e ho problemi.

Sto usando i metodi RDBMS nel mio script di installazione, 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();

Questo funziona benissimo per creare la mia tabella, ma in realtà ottenere i miei dati mi sta rovinando la testa (sono ancora un noob quando si tratta di gestione del database).

Idealmente, analizzerei semplicemente il mio file CSV e inserirò i valori nella tabella senza dover affrontare un mucchio di copia / incolla.

Esistono metodi integrati per la gestione di dati CSV arbitrari o sono tutti progettati per gestire esattamente ciò di cui hanno bisogno? Quale sarebbe l'approccio migliore per trasferire i miei dati in Magento?

Risposte:


15

Non l'ho mai fatto. Giochiamo!

Dopo la createTable()chiamata o in uno script successivo:

/* @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();

caspita non mi aspettavo che potesse essere così facile! :) Spero che
funzioni

Modificato per mostrare come registrare i risultati, che richiede uno script di impostazione dei dati.
benmarks

Varien_File_Csv, sapevo che doveva essere lì da qualche parte. Ci proverò e aggiornerò con i risultati.
pspahn,

Così brillantemente semplice. Hai appena fatto il mio sabato. Grazie @benmarks.
pspahn,

2
Vale anche la pena notare che nella mia situazione Magento stava esaurendo la memoria quando ho aggiunto ulteriori colonne. Due colonne di dati andavano bene (appena) e non appena avessi aggiunto una terza colonna ed eseguito lo script di aggiornamento, Magento avrebbe fallito con una pagina bianca e senza messaggi di errore / registri. Sono stato costretto a dividere il mio CSV in più file per farlo funzionare.
pspahn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.