Magento – Leer archivo csv e insertar en una tabla por SQL.
Es posible que en alguna ocasión hayas tenido la necesidad de incorporar información desde una fuente de datos externa a Magento pero que esta acción sea un duro trabajo debido al volumen de la misma. Te presentamos una solución que te hará más fácil este propósito: incorporar información desde un archivo .csv directamente a una tabla de Magento por SQL!
Utilizar sentencias de SQL agilizará el tiempo de ejecución de esta tarea, evitando problemas de ejecución en servidores bajo rendimiento.
/** * Leer archivo csv e insertar en una tabla por SQL. */ public function uploadCSVFile() { //*** Definición Adapter $adapter = Mage::getModel('core/resource')->getConnection('core_write'); //*** Commit transacciones existentes (utilizar con precaución!) if ($adapter->getTransactionLevel > 0) { $adapter->commit(); } //*** Definir Nivel de aislamiento: en el ejemplo se pueden leer los registros tras un commit! $adapter->query('SET TRANSACTION ISOLATION LEVEL READ COMMITTED'); $adapter->beginTransaction(); try { $tablename = $this->_getTableName('your_table_name'); //*** Truncate table - Vaciamos tabla! $sqlquery_truncate = 'TRUNCATE TABLE '.$tablenameto; $adapter->query($sqlquery_truncate); $adapter->commit(); //*** Informar ruta fichero csv. En el ejemplo, está subido al servidor! $fileToImp = ''; $fileToImp = Mage::getBaseDir('base').'/your_folder/your_file_name.csv'; //*** Importación archivo CSV. En el ejemplo importamos 3 columnas! $row = 1; $separatorChar = ','; $fp = fopen ($fileToImp,"r"); while ($data = fgetcsv ($fp, 1000, $separatorChar)) { //*** Comprobaciones. En el ejemplo la columna 1 no puede estar vacía. if ($data[0] == ''){ //*** Error! throw new Exception('First column is empty!. No valid record number %d: ',$row); }else{ $num = count ($data); $sqlquery_insert = 'INSERT INTO '.$tablenameto; $sqlquery_insert .= ' (column1,column1,column1) VALUES ('; $sqlquery_insert .= '\''.$data[0].'\''.','.'\''.$data[1].'\''.','.'\''.$data[2].'\''.')'; $adapter->query($sqlquery_insert ); $adapter->commit(); } $row++; } fclose ($fp); //*** Unset Variables unset($adapter); } catch (Exception $e) { // Rollback si tenemos una excepción! $adapter->rollBack(); var_dump($e->getMessage()); } }