Tạo bảng cơ sở dữ liệu từ CSV


15

Tôi đang làm việc trên một mô-đun yêu cầu quyền truy cập vào một số dữ liệu dạng bảng được cung cấp từ nguồn bên ngoài. Nó chỉ có hai cột nhưng có khoảng 40000 hàng.

Hiện tại, mô-đun của tôi chỉ phân tích toàn bộ CSV khi cần thiết. Điều này hoạt động tốt, nhưng vì tệp khoảng 450Kb, điều này sẽ ăn hết tài nguyên máy chủ khi được triển khai đến một trang sản xuất.

Tôi muốn chuyển dữ liệu này sang bảng Magento và gặp sự cố.

Tôi đang sử dụng các phương thức RDBMS trong tập lệnh thiết lập của mình, 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();

Điều này chỉ hoạt động tốt để tạo bảng của tôi, nhưng thực sự nhận được dữ liệu của tôi đang làm hỏng đầu của tôi (Tôi vẫn là một người không biết gì khi nói đến quản lý cơ sở dữ liệu).

Lý tưởng nhất, tôi sẽ chỉ phân tích tệp CSV của mình và chèn các giá trị vào bảng mà không phải xử lý một loạt các bản sao / dán.

Có bất kỳ phương pháp tích hợp nào để xử lý dữ liệu CSV tùy ý hay tất cả chúng đều được xây dựng để xử lý đúng những gì chúng cần? Cách tiếp cận tốt nhất để đưa dữ liệu của tôi vào Magento là gì?

Câu trả lời:


15

Không bao giờ làm điều này. Hãy chơi nào!

Sau createTable()cuộc gọi, hoặc trong một kịch bản tiếp theo:

/* @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();

wow tôi không mong đợi, rằng điều này có thể rất dễ dàng! :) Hy vọng điều này hoạt động
Fabian Blechschmidt

Điều chỉnh để hiển thị cách ghi nhật ký kết quả, yêu cầu tập lệnh thiết lập dữ liệu.
đánh dấu

Varien_File_Csv, tôi biết nó phải ở đâu đó. Tôi sẽ cung cấp cho nó một shot và cập nhật với kết quả.
pspahn

Thật đơn giản. Bạn vừa làm thứ bảy của tôi. Cảm ơn @benmark.
pspahn

2
Cũng đáng chú ý ở đây là trong tình huống của tôi, Magento đã hết bộ nhớ khi tôi thêm các cột bổ sung. Hai cột dữ liệu vẫn ổn (chỉ vừa đủ) và ngay khi tôi thêm cột thứ ba và chạy tập lệnh nâng cấp, Magento sẽ thất bại với một trang trắng và không có thông báo / nhật ký lỗi. Tôi đã buộc phải chia CSV của mình thành nhiều tệp để làm cho nó hoạt động.
pspahn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.