Datenbanktabelle aus CSV erstellen

15

Ich arbeite an einem Modul, das den Zugriff auf einige Tabellendaten aus einer externen Quelle erfordert. Es ist nur zwei Spalten, hat aber ungefähr 40000 Zeilen.

Derzeit analysiert mein Modul die CSV-Datei nur bei Bedarf vollständig. Das funktioniert gut, aber da die Datei ungefähr 450 KB groß ist, werden Serverressourcen aufgebraucht, sobald sie an einem Produktionsstandort bereitgestellt werden.

Ich möchte diese Daten in eine Magento-Tabelle verschieben und habe Probleme.

Ich verwende die RDBMS-Methoden in meinem Setup-Skript, unter anderem:

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

Das funktioniert gut, um meine Tabelle zu erstellen, aber das Einspielen meiner Daten macht mir Kopfzerbrechen (ich bin immer noch ein Neuling, wenn es um die Datenbankverwaltung geht).

Im Idealfall analysiere ich einfach meine CSV-Datei und füge Werte in die Tabelle ein, ohne mich mit ein paar Kopier- / Einfügevorgängen befassen zu müssen.

Gibt es integrierte Methoden für den Umgang mit beliebigen CSV-Daten, oder sind sie alle so konzipiert, dass sie genau das verarbeiten, was sie benötigen? Was wäre der beste Ansatz, um meine Daten in Magento zu übertragen?

pspahn
quelle

Antworten:

15

Das habe ich noch nie gemacht. Lass uns was spielen!

Nach dem createTable()Aufruf oder in einem nachfolgenden Skript:

/* @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
quelle
wow ich hätte nicht gedacht, dass das so einfach sein könnte! :) Hoffe das klappt
Fabian Blechschmidt
Angepasst, um zu zeigen, wie Ergebnisse protokolliert werden, für die ein Daten-Setup-Skript erforderlich ist.
Benmarks
Varien_File_Csv, ich wusste, dass es irgendwo da sein musste. Ich versuche es und aktualisiere die Ergebnisse.
Pspahn
So genial einfach. Du hast gerade meinen Samstag gemacht. Danke @benmarks.
Pspahn
2
Erwähnenswert ist auch, dass Magento in meiner Situation nicht genügend Speicherplatz hatte, als ich zusätzliche Spalten hinzufügte. Zwei Datenspalten waren in Ordnung (nur knapp) und sobald ich eine dritte Spalte hinzufügte und das Upgrade-Skript ausführte, schlug Magento mit einer weißen Seite und keinen Fehlermeldungen / Protokollen fehl. Ich musste meine CSV-Datei in mehrere Dateien aufteilen, damit sie funktioniert.
Pspahn