【问题标题】:import a CSV file to MySQL [duplicate]将 CSV 文件导入 MySQL [重复]
【发布时间】:2021-11-19 16:28:22
【问题描述】:

我是 nodejs 的初学者,我正在尝试将 CSV 文件导入 MySQL 连接工作成功,但是当我上传文件时它给出了一个错误

我这样做:

    //use express static folder
app.use(express.static("./public"))
 
// body-parser middleware use
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({
    extended: true
}))
 
 
db.connect(function (err) {
    if (err) {
        return console.error('error: ' + err.message);
    }
    console.log('Connected to the MySQL server.');
})
 
//! Use of Multer
var storage = multer.diskStorage({
    destination: (req, file, callBack) => {
        callBack(null, './uploads/')    
    },
    filename: (req, file, callBack) => {
        callBack(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
    }
})
 
var upload = multer({
    storage: storage
});
 
//! Routes start
 
//route for Home page
app.get('/', (req, res) => {
  res.sendFile(__dirname + '/index.html');
});
 
//@type   POST
// upload csv to database
app.post('/uploadfile', upload.single("uploadfile"), (req, res) =>{
    UploadCsvDataToMySQL(__dirname + '/uploads/' + req.file.filename);
    console.log('CSV file data has been uploaded in mysql database ' + err);
});
 
function UploadCsvDataToMySQL(filePath){
    let stream = fs.createReadStream(filePath);
    let csvData = [];
    let csvStream = csv
        .parse()
        .on("data", function (data) {
            csvData.push(data);
        })
        .on("end", function () {
            // Remove Header ROW
            csvData.shift();
  
            // Open the MySQL connection
            db.connect((error) => {
                if (error) {
                    console.error(error);
                } else {
                    let query = 'INSERT INTO files (File-ID, File_Name) VALUES ?';
                    db.query(query, [csvData], (error, response) => {
                        console.log(error || response);
                    });
                }
            });
             
            // delete file after saving to MySQL database
            // -> you can comment the statement to see the uploaded CSV file.
            fs.unlinkSync(filePath)
        });
  
    stream.pipe(csvStream);
}
 
//create connection
const PORT = process.env.PORT || 8000
app.listen(PORT, () => console.log(`Server is running at port ${PORT}`))

但它给了我这个错误: ReferenceError:未定义错误 在 C:\Users\DELL\Desktop\Advanced\AdvancedSeE\dbmanager\index.js:80:72 在 Layer.handle [as handle_request] (C:\Users\DELL\Desktop\Advanced\AdvancedSeE\dbmanager\node_modules\express\lib\router\layer.js:95:5) 在下一个(C:\Users\DELL\Desktop\Advanced\AdvancedSeE\dbmanager\node_modules\express\lib\router\route.js:137:13) 在阵列。 (C:\Users\DELL\Desktop\Advanced\AdvancedSeE\dbmanager\node_modules\multer\lib\make-middleware.js:53:37) 在侦听器处(C:\Users\DELL\Desktop\Advanced\AdvancedSeE\dbmanager\node_modules\on-finished\index.js:169:15) 在 onFinish (C:\Users\DELL\Desktop\Advanced\AdvancedSeE\dbmanager\node_modules\on-finished\index.js:100:5) 在回调时(C:\Users\DELL\Desktop\Advanced\AdvancedSeE\dbmanager\node_modules\ee-first\index.js:55:10) 在 IncomingMessage.onevent (C:\Users\DELL\Desktop\Advanced\AdvancedSeE\dbmanager\node_modules\ee-first\index.js:93:5) 在 IncomingMessage.emit (节点:事件:341:22) 在 endReadableNT(节点:内部/流/可读:1294:12) 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '-ID, File_Name) VALUES ('112', 'test2')' 附近使用正确的语法 在 Packet.asError (C:\Users\DELL\Desktop\Advanced\AdvancedSeE\dbmanager\node_modules\mysql2\lib\packets\packet.js:728:17) 在 Query.execute (C:\Users\DELL\Desktop\Advanced\AdvancedSeE\dbmanager\node_modules\mysql2\lib\commands\command.js:29:26) 在 Connection.handlePacket (C:\Users\DELL\Desktop\Advanced\AdvancedSeE\dbmanager\node_modules\mysql2\lib\connection.js:456:32) 在 PacketParser.onPacket (C:\Users\DELL\Desktop\Advanced\AdvancedSeE\dbmanager\node_modules\mysql2\lib\connection.js:85:12) 在 PacketParser.executeStart (C:\Users\DELL\Desktop\Advanced\AdvancedSeE\dbmanager\node_modules\mysql2\lib\packet_parser.js:75:16) 在套接字。 (C:\Users\DELL\Desktop\Advanced\AdvancedSeE\dbmanager\node_modules\mysql2\lib\connection.js:92:25) 在 Socket.emit(节点:事件:329:20) 在 addChunk(节点:内部/流/可读:304:12) 在 readableAddChunk(节点:内部/流/可读:279:9) 在 Socket.Readable.push(节点:内部/流/可读:218:10){ 代码:'ER_PARSE_ERROR', 错误号:1064, sqlState: '42000', sqlMessage:“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '-ID, File_Name) VALUES ('112', 'test2')' 附近使用正确的语法” , sql:“插入文件(文件ID,文件名)值('112','test2')” }

【问题讨论】:

    标签: javascript mysql node.js


    【解决方案1】:

    您导入文件中的列名似乎无效,正如您在错误消息末尾看到的那样

    INSERT INTO files (File-ID, File_Name) VALUES ('112', 'test2')
    

    列名 File-ID 应该更改(mysql 中的减号用于数学和平均列 FIle - 列 ID)

    或使用反引号

     INSERT INTO files (`File-ID`, File_Name) VALUES ('112', 'test2')
    

    或避免使用减号

    INSERT INTO files (File_ID, File_Name) VALUES ('112', 'test2')
    

    尝试编辑文件并正确更改名称

    【讨论】:

    • @SaraBB 请作为单独的问题提出进一步的问题,而不是作为对不同问题的答案的 cmets!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    相关资源
    最近更新 更多