Criar tabela de banco de dados a partir de CSV

15

Estou trabalhando em um módulo que requer acesso a alguns dados tabulares fornecidos por uma fonte externa. São apenas duas colunas, mas têm aproximadamente 40000 linhas.

Atualmente, meu módulo está apenas analisando o CSV na íntegra, quando necessário. Isso funciona bem, mas como o arquivo tem cerca de 450 KB, isso consumirá os recursos do servidor, uma vez implantados em um site de produção.

Gostaria de mover esses dados para uma tabela Magento e estou tendo problemas.

Estou usando os métodos RDBMS no meu script de instalação, 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();

Isso funciona muito bem para criar minha tabela, mas, na verdade, obter meus dados está estragando minha cabeça (ainda sou um noob quando se trata de gerenciamento de banco de dados).

Idealmente, eu apenas analisava meu arquivo CSV e inseria valores na tabela sem precisar lidar com um monte de copiar / colar.

Existem métodos internos para manipular dados CSV arbitrários ou todos eles são criados para manipular exatamente o que precisam? Qual seria a melhor abordagem para colocar meus dados no Magento?

pspahn
fonte

Respostas:

15

Nunca fiz isso. Vamos jogar!

Após a createTable()chamada ou em um script subsequente:

/* @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();
benmarks
fonte
uau, eu não esperava que isso fosse tão fácil! :) Espero que isso funcione #
Fabian Blechschmidt
Ajustado para mostrar como registrar resultados, o que requer script de configuração de dados.
benmarks 26/01
Varien_File_Csv, eu sabia que tinha que estar lá em algum lugar. Vou tentar e atualizar com os resultados.
Pspahn 26/01
Tão brilhantemente simples. Você acabou de fazer o meu sábado. Obrigado @benmarks.
Pspahn 26/01
2
Também vale a pena notar aqui que, na minha situação, o Magento estava ficando sem memória quando adicionei colunas adicionais. Duas colunas de dados estavam corretas (apenas por pouco) e, assim que adicionasse uma terceira coluna e executasse o script de atualização, o Magento falharia com uma página em branco e nenhuma mensagem de erro / registro. Fui forçado a dividir meu CSV em vários arquivos para fazê-lo funcionar.
Pspahn 28/01