Sự khác biệt giữa Sequelize và MySQL là gì?

Thông báo quan trọng. để thực hiện các truy vấn sẵn sàng sản xuất với Phần tiếp theo, hãy đảm bảo bạn cũng đã đọc hướng dẫn về Giao dịch. Giao dịch rất quan trọng để đảm bảo tính toàn vẹn của dữ liệu và cung cấp các lợi ích khác

Hướng dẫn này sẽ chỉ ra cách thực hiện các truy vấn CRUD tiêu chuẩn

Truy vấn INSERT đơn giản​

Đầu tiên, một ví dụ đơn giản

// Create a new user
const jane = await User.create({ firstName: "Jane", lastName: "Doe" });
console.log("Jane's auto-generated ID:", jane.id);

Phương thức

Model.findAll({
attributes: ['foo', 'bar']
});
2 là cách viết tắt để xây dựng một phiên bản chưa được lưu với
Model.findAll({
attributes: ['foo', 'bar']
});
3 và lưu phiên bản đó với
Model.findAll({
attributes: ['foo', 'bar']
});
4

Cũng có thể xác định thuộc tính nào có thể được đặt trong phương thức

Model.findAll({
attributes: ['foo', 'bar']
});
5. Điều này có thể đặc biệt hữu ích nếu bạn tạo các mục nhập cơ sở dữ liệu dựa trên biểu mẫu mà người dùng có thể điền vào. Ví dụ: sử dụng điều đó sẽ cho phép bạn hạn chế mô hình
Model.findAll({
attributes: ['foo', 'bar']
});
6 chỉ đặt tên người dùng chứ không đặt cờ quản trị viên (tôi. e. ,
Model.findAll({
attributes: ['foo', 'bar']
});
7)

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false

Truy vấn CHỌN đơn giản​

Bạn có thể đọc toàn bộ bảng từ cơ sở dữ liệu bằng phương pháp

Model.findAll({
attributes: ['foo', 'bar']
});
8

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));

Model.findAll({
attributes: ['foo', 'bar']
});
0

Chỉ định thuộc tính cho truy vấn CHỌN​

Để chỉ chọn một số thuộc tính, bạn có thể sử dụng tùy chọn

Model.findAll({
attributes: ['foo', 'bar']
});
9

Model.findAll({
attributes: ['foo', 'bar']
});

Model.findAll({
attributes: ['foo', 'bar']
});
3

Các thuộc tính có thể được đổi tên bằng cách sử dụng một mảng lồng nhau

Model.findAll({
attributes: ['foo', 'bar']
});
4

Model.findAll({
attributes: ['foo', 'bar']
});
5

Bạn có thể sử dụng

Model.findAll({
attributes: ['foo', 'bar']
});
30 để thực hiện tổng hợp

Model.findAll({
attributes: ['foo', 'bar']
});
7

Model.findAll({
attributes: ['foo', 'bar']
});
8

Khi sử dụng chức năng tổng hợp, bạn phải đặt cho nó một bí danh để có thể truy cập nó từ mô hình. Trong ví dụ trên, bạn có thể lấy số lượng mũ bằng

Model.findAll({
attributes: ['foo', 'bar']
});
31

Đôi khi việc liệt kê tất cả các thuộc tính của mô hình có thể gây mệt mỏi nếu bạn chỉ muốn thêm một tập hợp

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
0

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
1

Tương tự, cũng có thể loại bỏ một số thuộc tính đã chọn

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
2

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
3

Áp dụng mệnh đề WHERE

Tùy chọn

Model.findAll({
attributes: ['foo', 'bar']
});
32 được sử dụng để lọc truy vấn. Có rất nhiều toán tử để sử dụng cho mệnh đề
Model.findAll({
attributes: ['foo', 'bar']
});
32, có sẵn dưới dạng Ký hiệu từ
Model.findAll({
attributes: ['foo', 'bar']
});
34

những điều cơ bản

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
4

Quan sát rằng không có toán tử nào (từ

Model.findAll({
attributes: ['foo', 'bar']
});
34) được thông qua một cách rõ ràng, vì vậy Sequelize mặc định mặc định so sánh đẳng thức. Đoạn mã trên tương đương với

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
5

Nhiều kiểm tra có thể được thông qua

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
6

Giống như Sequelize đã suy ra toán tử

Model.findAll({
attributes: ['foo', 'bar']
});
36 trong ví dụ đầu tiên, ở đây Sequelize đã suy ra rằng người gọi muốn có một
Model.findAll({
attributes: ['foo', 'bar']
});
37 cho hai lần kiểm tra. Đoạn mã trên tương đương với

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
7

Có thể dễ dàng thực hiện một

Model.findAll({
attributes: ['foo', 'bar']
});
38 theo cách tương tự

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
8

Vì ở trên là một

Model.findAll({
attributes: ['foo', 'bar']
});
38 liên quan đến cùng một trường, Sequelize cho phép bạn sử dụng một cấu trúc hơi khác, dễ đọc hơn và tạo ra cùng một hành vi

const user = await User.create({
username: 'alice123',
isAdmin: true
}, { fields: ['username'] });
// let's assume the default of isAdmin is false
console.log(user.username); // 'alice123'
console.log(user.isAdmin); // false
9

nhà điều hành

Sequelize cung cấp một số toán tử

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
0

Cú pháp viết tắt của
Model.findAll({
attributes: ['foo', 'bar']
});
40​

Truyền một mảng trực tiếp vào tùy chọn

Model.findAll({
attributes: ['foo', 'bar']
});
32 sẽ ngầm sử dụng toán tử
Model.findAll({
attributes: ['foo', 'bar']
});
42

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
1

Kết hợp logic với toán tử

Các toán tử

Model.findAll({
attributes: ['foo', 'bar']
});
43,
Model.findAll({
attributes: ['foo', 'bar']
});
44 và
Model.findAll({
attributes: ['foo', 'bar']
});
45 có thể được sử dụng để tạo các phép so sánh logic lồng nhau phức tạp tùy ý

Ví dụ với
Model.findAll({
attributes: ['foo', 'bar']
});
43 và
Model.findAll({
attributes: ['foo', 'bar']
});
44​

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
2

Ví dụ với
Model.findAll({
attributes: ['foo', 'bar']
});
45​

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
3

Ở trên sẽ tạo ra

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
4

Truy vấn nâng cao với hàm (không chỉ cột)​

Điều gì sẽ xảy ra nếu bạn muốn lấy thứ gì đó như

Model.findAll({
attributes: ['foo', 'bar']
});
49?

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
5

Lưu ý cách sử dụng các phương thức

Model.findAll({
attributes: ['foo', 'bar']
});
30 và
Model.findAll({
attributes: ['foo', 'bar']
});
51, nên được sử dụng để chỉ định một lệnh gọi hàm SQL và một cột trong bảng, tương ứng. Các phương pháp này nên được sử dụng thay vì chuyển một chuỗi đơn giản (chẳng hạn như
Model.findAll({
attributes: ['foo', 'bar']
});
52) vì Sequelize cần xử lý tình huống này theo cách khác (ví dụ: sử dụng các phương pháp thoát ký hiệu khác)

Điều gì nếu bạn cần một cái gì đó phức tạp hơn?

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
6

Ở trên tạo ra SQL sau

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
7

Toán tử phạm vi chỉ dành cho Postgres​

Các loại phạm vi có thể được truy vấn với tất cả các toán tử được hỗ trợ

Xin lưu ý rằng giá trị phạm vi được cung cấp cũng có thể xác định giới hạn bao gồm/loại trừ

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
8

không dùng nữa. Bí danh nhà điều hành

Trong Sequelize v4, có thể chỉ định các chuỗi để chỉ các toán tử, thay vì sử dụng Ký hiệu. Điều này hiện không được dùng nữa và không được khuyến khích nhiều và có thể sẽ bị xóa trong phiên bản chính tiếp theo. Nếu bạn thực sự cần nó, bạn có thể chuyển tùy chọn

Model.findAll({
attributes: ['foo', 'bar']
});
53 trong hàm tạo Sequelize

Ví dụ

// Find all users
const users = await User.findAll();
console.log(users.every(user => user instanceof User)); // true
console.log("All users:", JSON.stringify(users, null, 2));
9

Truy vấn CẬP NHẬT đơn giản​

Truy vấn cập nhật cũng chấp nhận tùy chọn

Model.findAll({
attributes: ['foo', 'bar']
});
32, giống như truy vấn đọc được hiển thị ở trên

Model.findAll({
attributes: ['foo', 'bar']
});
00

Các truy vấn XÓA đơn giản​

Truy vấn xóa cũng chấp nhận tùy chọn

Model.findAll({
attributes: ['foo', 'bar']
});
32, giống như truy vấn đọc được hiển thị ở trên

Model.findAll({
attributes: ['foo', 'bar']
});
01

Để hủy mọi thứ, có thể sử dụng SQL

Model.findAll({
attributes: ['foo', 'bar']
});
56

Model.findAll({
attributes: ['foo', 'bar']
});
02

Tạo hàng loạt

Sequelize cung cấp phương thức

Model.findAll({
attributes: ['foo', 'bar']
});
57 cho phép tạo nhiều bản ghi cùng lúc, chỉ với một truy vấn

Cách sử dụng của

Model.findAll({
attributes: ['foo', 'bar']
});
57 rất giống với
Model.findAll({
attributes: ['foo', 'bar']
});
59, bằng cách nhận một mảng các đối tượng thay vì một đối tượng

Model.findAll({
attributes: ['foo', 'bar']
});
03

Tuy nhiên, theo mặc định,

Model.findAll({
attributes: ['foo', 'bar']
});
70 không chạy xác thực trên từng đối tượng sẽ được tạo (điều mà
Model.findAll({
attributes: ['foo', 'bar']
});
5 thực hiện). Để làm cho
Model.findAll({
attributes: ['foo', 'bar']
});
70 cũng chạy các xác thực này, bạn phải vượt qua tùy chọn
Model.findAll({
attributes: ['foo', 'bar']
});
73. Điều này sẽ làm giảm hiệu suất. Ví dụ sử dụng

Model.findAll({
attributes: ['foo', 'bar']
});
04

Nếu bạn đang chấp nhận các giá trị trực tiếp từ người dùng, có thể hữu ích khi giới hạn các cột mà bạn thực sự muốn chèn. Để hỗ trợ điều này,

Model.findAll({
attributes: ['foo', 'bar']
});
74 chấp nhận tùy chọn
Model.findAll({
attributes: ['foo', 'bar']
});
75, một mảng xác định trường nào phải được xem xét (phần còn lại sẽ bị bỏ qua)

Model.findAll({
attributes: ['foo', 'bar']
});
05

Đặt hàng và nhóm

Sequelize cung cấp các tùy chọn

Model.findAll({
attributes: ['foo', 'bar']
});
76 và
Model.findAll({
attributes: ['foo', 'bar']
});
77 để làm việc với
Model.findAll({
attributes: ['foo', 'bar']
});
78 và
Model.findAll({
attributes: ['foo', 'bar']
});
79

đặt hàng

Tùy chọn

Model.findAll({
attributes: ['foo', 'bar']
});
76 lấy một mảng các mục để sắp xếp truy vấn theo hoặc một phương thức sắp xếp lại. Bản thân các mục này là các mảng ở dạng
Model.findAll({
attributes: ['foo', 'bar']
});
81. Cột sẽ được thoát chính xác và hướng sẽ được kiểm tra trong danh sách trắng gồm các hướng hợp lệ (chẳng hạn như
Model.findAll({
attributes: ['foo', 'bar']
});
82,
Model.findAll({
attributes: ['foo', 'bar']
});
83,
Model.findAll({
attributes: ['foo', 'bar']
});
84, v.v.)

Model.findAll({
attributes: ['foo', 'bar']
});
06

Tóm lại, các phần tử của mảng thứ tự có thể như sau

  • Một chuỗi (sẽ được trích dẫn tự động)
  • Một mảng, có phần tử đầu tiên sẽ được trích dẫn, phần tử thứ hai sẽ được thêm vào nguyên văn
  • Một đối tượng có trường
    Model.findAll({
    attributes: ['foo', 'bar']
    });
    85
    • Nội dung của
      Model.findAll({
      attributes: ['foo', 'bar']
      });
      85 sẽ được bổ sung nguyên văn mà không trích dẫn
    • Mọi thứ khác bị bỏ qua và nếu raw không được đặt, truy vấn sẽ thất bại
  • Một lệnh gọi tới
    Model.findAll({
    attributes: ['foo', 'bar']
    });
    87 (sẽ tạo ra một lệnh gọi hàm trong SQL)
  • Một cuộc gọi đến
    Model.findAll({
    attributes: ['foo', 'bar']
    });
    88 (sẽ trích dẫn tên cột)

phân nhóm

Cú pháp để nhóm và sắp xếp giống nhau, ngoại trừ việc nhóm không chấp nhận hướng là đối số cuối cùng của mảng (không có

Model.findAll({
attributes: ['foo', 'bar']
});
82,
Model.findAll({
attributes: ['foo', 'bar']
});
83,
Model.findAll({
attributes: ['foo', 'bar']
});
84, v.v.)

Bạn cũng có thể chuyển trực tiếp một chuỗi tới

Model.findAll({
attributes: ['foo', 'bar']
});
77, chuỗi này sẽ được đưa trực tiếp (nguyên văn) vào SQL được tạo. Thận trọng khi sử dụng và không sử dụng với nội dung do người dùng tạo

Sử dụng Sequelize có tốt không?

Sequelize là một thư viện mạnh mẽ trong Javascript giúp dễ dàng quản lý cơ sở dữ liệu SQL. Phần tiếp theo có thể tạo lớp trên các giao thức khác nhau, nhưng ở đây chúng tôi sẽ sử dụng PostgreSQL. Về cốt lõi, Sequelize là một Trình ánh xạ quan hệ đối tượng – nghĩa là nó ánh xạ một cú pháp đối tượng lên các lược đồ cơ sở dữ liệu của chúng tôi. Sequelize sử dụng Node

Phần tiếp theo được sử dụng để làm gì?

Sequelize là một Nút. Trình ánh xạ quan hệ đối tượng dựa trên js giúp giúp dễ dàng làm việc với cơ sở dữ liệu MySQL, MariaDB, SQLite, PostgreSQL, v.v. . Trình ánh xạ quan hệ đối tượng thực hiện các chức năng như xử lý các bản ghi cơ sở dữ liệu bằng cách biểu diễn dữ liệu dưới dạng các đối tượng.

ORM cho MySQL trong nút là gì?

ORM là gì? . a technique where you use an object-oriented paradigm to create a mapping between application and database to perform data manipulation and query directly.

SQL được tuần tự hóa hay NoSQL?

Được giới thiệu vào khoảng năm 2014, Sequelize là một ORM dễ sử dụng và dựa trên Promise dành cho Node. js. Nó hỗ trợ nhiều cơ sở dữ liệu, bao gồm PostgreSQL, MySQL, MariaDB, SQLite, DB2 và MSSQL. Các hạn chế của nó bao gồm thiếu hỗ trợ NoSQL và chỉ hỗ trợ mẫu Bản ghi Hoạt động.