Ví dụ dưới đây dựa trên thư viện pg-promise và phương thức helpers.update:
// library initialization, usually placed in its own module:
const pgp = require('pg-promise')({
capSQL: true // capitalize all generated SQL
});
const db = pgp(/*your connection details*/);
// records to be updated:
const updateData = [
{id: 1, value: 1234},
{id: 2, value: 5678},
{id: 3, value: 91011}
];
// declare your ColumnSet once, and then reuse it:
const cs = new pgp.helpers.ColumnSet(['?id', 'value'], {table: 'fit_ratios'});
// generating the update query where it is needed:
const update = pgp.helpers.update(updateData, cs) + ' WHERE v.id = t.id';
//=> UPDATE "fit_ratios" AS t SET "value"=v."value"
// FROM (VALUES(1,1234),(2,5678),(3,91011))
// AS v("id","value") WHERE v.id = t.id
// executing the query:
await db.none(update);
Phương pháp tạo cập nhật nhiều hàng này có thể được mô tả như sau:
- rất nhanh, vì nó dựa trên loại ColumnSet triển khai bộ nhớ đệm thông minh để tạo truy vấn
- hoàn toàn an toàn, vì tất cả các loại dữ liệu đều đi qua công cụ định dạng truy vấn của thư viện để đảm bảo mọi thứ đều được định dạng và thoát đúng cách.
- rất linh hoạt, do cú pháp ColumnConfig nâng cao được hỗ trợ cho định nghĩa cột.
- rất dễ sử dụng, do giao diện đơn giản được triển khai bởi pg-promise.
Lưu ý rằng chúng tôi sử dụng ?
phía trước cột id
để chỉ ra rằng cột là một phần của điều kiện, nhưng không được cập nhật. Để biết cú pháp cột hoàn chỉnh, hãy xem cấu trúc lớp Column và ColumnConfig.
Câu hỏi liên quan:Chèn nhiều hàng với pg-promise.