Buat tabel database dari CSV

15

Saya sedang mengerjakan modul yang memerlukan akses ke beberapa data tabular yang disediakan dari sumber eksternal. Ini hanya dua kolom tetapi memiliki sekitar 40000 baris.

Saat ini, modul saya hanya menguraikan CSV secara keseluruhan bila perlu. Ini berfungsi dengan baik, tetapi karena file tersebut sekitar 450Kb, ini akan memakan sumber daya server setelah dikerahkan ke situs produksi.

Saya ingin memindahkan data ini ke tabel Magento dan saya mengalami masalah.

Saya menggunakan metode RDBMS dalam skrip pengaturan saya, 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();

Ini berfungsi dengan baik untuk membuat tabel saya, tetapi sebenarnya mendapatkan data saya di kepala saya (saya masih noob ketika datang ke manajemen database).

Idealnya, saya hanya akan mem-parsing file CSV saya dan memasukkan nilai ke dalam tabel tanpa harus berurusan dengan banyak copy / paste.

Apakah ada metode bawaan untuk menangani data CSV yang sewenang-wenang, atau semuanya dibangun untuk menangani apa yang mereka perlukan? Apa yang akan menjadi pendekatan terbaik untuk memasukkan data saya ke Magento?

pspahn
sumber

Jawaban:

15

Tidak pernah melakukan ini. Mari main!

Setelah createTable()panggilan, atau dalam skrip berikutnya:

/* @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();
tanda batas
sumber
wow saya tidak berharap, bahwa ini mungkin sangat mudah! :) Semoga ini berhasil
Fabian Blechschmidt
Disesuaikan untuk menunjukkan cara mencatat hasil, yang membutuhkan skrip pengaturan data.
Tanda
Varien_File_Csv, saya tahu itu harus ada di suatu tempat. Saya akan mencoba ini dan memperbarui dengan hasil.
pspahn
Sangat sederhana. Anda baru saja membuat hari Sabtu saya. Terima kasih @pembanda.
pspahn
2
Juga perlu dicatat di sini adalah bahwa dalam situasi saya, Magento kehabisan memori ketika saya menambahkan kolom tambahan. Dua kolom data baik-baik saja (hanya nyaris) dan segera setelah saya menambahkan kolom ketiga dan menjalankan skrip upgrade, Magento hanya akan gagal dengan halaman putih dan tidak ada pesan kesalahan / log. Saya terpaksa membagi CSV saya menjadi beberapa file untuk membuatnya berfungsi.
pspahn