Crea una tabella di database da CSV
Domanda
Sto lavorando su un modulo che richiede l'accesso ad alcuni dati tabulari forniti da una sorgente esterna. E 'solo due colonne, ma ha circa 40000 righe.
Al momento, il mio modulo è solo l'analisi del CSV in totalità in caso di necessità. Questo metodo funziona bene, ma dal momento che il file è di circa 450Kb, questo sarà mangiare fino risorse del server, una volta distribuito in un sito di produzione.
Mi piacerebbe spostare questi dati a una tabella di Magento e sto avendo difficoltà.
Io 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 bene per creare il mio tavolo, ma in realtà sempre i miei dati in è wracking mia testa (io sono ancora un noob quando si tratta di gestione di database).
Idealmente, vorrei solo analizzare il mio file CSV e inserire i valori nella tabella, senza avere a che fare con un mazzo di copia / incolla.
Ci sono dei built-in metodi per la gestione dei dati CSV arbitrari, o sono tutti costruiti per gestire solo ciò di cui hanno bisogno per? Quale sarebbe l'approccio migliore per ottenere i miei dati in Magento?
Soluzione
mai fatto. un gioco da Let!
Dopo la chiamata createTable()
, o in uno script successiva:
/* @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();