Cách sử dụng Sequelize để tương tác với PostgreSQL

Khi làm việc với cơ sở dữ liệu, bạn có thể chọn sử dụng các nguyên bản do cơ sở dữ liệu cung cấp hoặc sử dụng một thư viện được xây dựng trên cùng và tóm tắt các chi tiết nhỏ cho bạn.

Trình tựlà một trong những thư viện đó và nó là một trình bao bọc Node.js rất phổ biến choPostgreSQL,MySQLvà các cơ sở dữ liệu khác.

Trong bài đăng này, tôi sẽ khám phá cách sử dụng Sequelize để làm việc với cơ sở dữ liệu PostgreSQL.

Cài đặt và cấu hình Sequelize

Dưới mui xe, Sequelize sử dụngpgthư viện để kết nối với PostgreSQL, vì vậy khi chúng tôi cài đặtsequelizegói npm, chúng tôi cũng cần cài đặtpg:

npm install pg sequelize

Mẹo: đừng quên lần chạy đầu tiênnpm init -ynếu dự án là thương hiệu mới và bạn không cópackage.jsontệp đã có.

Trong tệp Node.js của bạn, trước tiên bạn xác định các biến truy cập cơ sở dữ liệu:

const user = '<postgres user>'
const host = 'localhost'
const database = '<postgres db name>'
const password = '<postgres password>'
const port = '<postgres port>'

Sau đó, nhập 3 đối tượng từsequelize:

import { Sequelize, Model, DataTypes } from 'sequelize'

Sau đó, bạn có thể khởi tạo mộtSequelizecá thể đối tượng sử dụng cú pháp này:

const sequelize = new Sequelize(database, user, password, {
  host,
  port,
  dialect: 'postgres',
  logging: false
})

Chúng tôi cho Sequelize biết đây là loại cơ sở dữ liệu nào trongdialecttài sản (như đã đề cập, nó có thể xử lý nhiều hơn chỉ Postgres).

Chúng tôi cũng vô hiệu hóa việc ghi nhật ký, vì nó có thể rất dài dòng vì nó ghi lại tất cả các truy vấn SQL mà chúng tôi không thực sự cần xem xét (trừ khi bạn đang gỡ lỗi một vấn đề).

Cách tạo mô hình Sequelize

Đối với mỗi bảng bạn muốn thao tác bằng cách sử dụng Sequelize, bạn tạomô hình.

Đây là một ví dụ, giả sử chúng ta códogsbảng có hai cột:nameage.

Chúng tôi tạo ra mộtDogmở rộng lớp họcModellớp cơ sở:

import { Sequelize, Model, DataTypes } from 'sequelize'

const class Dog extends Model {}

Sau đó gọi choinit()phương thức static trên lớp mô tả dữ liệu mà nó chứa và các quy tắc chúng ta muốn áp dụng. Trong trường hợp này, chúng tôi vô hiệu hóanull:

Dog.init({
  name: {
    type: DataTypes.STRING,
    allowNull: false
  },
  age: {
    type: DataTypes.INTEGER,
    allowNull: false
  }
}, {
  sequelize,
  modelName: 'dog',
  timestamps: false
})

Chúng tôi đã sử dụngDataTypes.STRINGDataTypes.INTEGER. CácDataTypesđối tượng chứa tham chiếu đến tất cả các kiểu mà chúng ta có thể sử dụng và chúng ánh xạ tới từng kiểu cơ sở dữ liệu cụ thể.Xem tài liệu chính thứccho nhiều loại hơn bạn có thể sử dụng.

Cách lấy dữ liệu từ cơ sở dữ liệu

Bây giờ chúng ta đã có một mô hình, làm cách nào để lấy dữ liệu ra khỏi bảng?

Chúng ta có thể sử dụngfindAll()phương pháp:

Dog.findAll()

Việc gọi phương thức này sẽ trả về danh sách tất cả các hàng và chúng tôi sẽ gán nó cho một biến:

const results = await Dog.findAll()

Chúng tôi sử dụngawaitbởi vìfindAll()trả lại một lời hứa

Để giới hạn các cột chúng tôi truy xuất, hãy chuyển một đối tượng vớiattributesmảng:

Dog.findAll({
  attributes: ['age']
})

Thêm mộtWHEREmệnh đề cho truy vấn bằng cách sử dụngwherebất động sản. Ví dụ: nhận tất cả các con chó 8 tuổi:

Dog.findAll({
  where: {
    age: 8,
  }
})

Hoặc nhận tất cả những con chó có tuổi trên 5:

Dog.findAll({
  where: {
    age: {
      [Op.gte]: 5,
    }
  }
})

Nhiều thuộc tính hơn cho phép bạn thực hiện các thao tác khác nhưlimitorder:

Dog.findAll({
  limit: 10,
  order: [
    ['name', 'DESC']
  ]
})

Cách chèn dữ liệu vào cơ sở dữ liệu

Chúng tôi có thể gọiDog.create()truyền một đối tượng để tạo một hàng mới trong cơ sở dữ liệu:

const name = 'Roger'
const age = 8
const result = await Dog.create({ name, age })

Cách cập nhật dữ liệu

Sử dụngupdate()phương pháp cập nhật giá trị trong bảng.

Trong ví dụ này, tôi đặt tuổi của 'Roger' là 9:

Post.update({
  age: 9
}, {
  where: {
    name: 'Roger'
  }
})

Di chuyển cáiwherethuộc tính sẽ cập nhật tất cả các hàng:

Post.update({
  age: 10
})

Tải xuống miễn phí của tôiSổ tay Node.js


Các hướng dẫn nút khác: