【问题标题】:Can't do bulk update using MariaDB, pool.query and Express无法使用 MariaDB、pool.query 和 Express 进行批量更新
【发布时间】:2021-12-06 11:33:58
【问题描述】:

我有一个用 Express 和 MariaDB 作为 DBMS 编写的 API,我正在尝试使用数组同时更新多条记录,但它不起作用。 示例:

const data = [ [ '2', '130' ], [ '4', '10' ] ]
try {
const updatedInventory = await pool.query('UPDATE inventory SET qty_shipped = qty_shipped + VALUES ? WHERE sku_id = VALUES ?', [data])
res.status(201).json(updatedInventory)
} catch (error) {
    res.status(500).json({ message: error.message })
    console.error(error.message)
}

但是我得到了这个错误:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'VALUES ('2', '130'), ('4', '10') WHERE sku_id = VALUES ?' at line 1

我对插入端点做了类似的事情,我也在使用数组进行批量插入,效果很好:

const newInventory = await pool.query('INSERT INTO inventory (sku_id, qty_received, expiration_date) VALUES ? ON DUPLICATE KEY UPDATE qty_received = qty_received + VALUES(qty_received) ', [data])

关于如何使批量更新部分正常工作的任何想法?

【问题讨论】:

    标签: node.js express mariadb pool bulkupdate


    【解决方案1】:

    根据您在问题中输入的错误,第二个“?”没有接地。如果您查看错误,您会看到第一个值集基于数据变量,但第二个不是。

    如果您希望将数据接地到“?”在您的语句中,那么您可能需要将数据变量添加到您的语句中两次。

    另外,您可能无法将数据变量接地两次。我没想到会这样;您应该能够在我们的语句中使用两次 data 变量。如果您需要不同的变量,则创建第二个变量,将数据复制到第二个变量中,然后在语句中将两个变量都接地。

    【讨论】:

    • 感谢您的帮助,我最终使用了对象而不是数组,这样我就可以将两个变量都接地:for (const element of data) { await pool.query('UPDATE inventory SET qty_shipped = qty_shipped + ? WHERE sku_id = ?', [element.qty_shipped, element.sku_id]) }
    猜你喜欢
    • 2021-04-15
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多