Sequelize is a powerful ORM (Object-Relational Mapping) library for Node.js that simplifies database interactions by abstracting raw SQL queries into JavaScript objects. It supports PostgreSQL and provides a structured way to manage database operations.
To use Sequelize with PostgreSQL, install the required dependencies:
npm install sequelize pg pg-hstoreconst { Sequelize } = require("sequelize");
const sequelize = new Sequelize("database", "username", "password", {
host: "localhost",
dialect: "postgres",
});
(async () => {
try {
await sequelize.authenticate();
console.log("Connection has been established successfully.");
} catch (error) {
console.error("Unable to connect to the database:", error);
}
})();const { DataTypes } = require("sequelize");
const User = sequelize.define("User", {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
name: {
type: DataTypes.STRING,
allowNull: false,
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
},
});const newUser = await User.create({ name: "Samnang", email: "samnang@example.com" });
console.log(newUser.toJSON());const users = await User.findAll();
console.log(users);await User.update({ name: "Samnang" }, { where: { id: 1 } });await User.destroy({ where: { id: 1 } });const Post = sequelize.define("Post", {
title: DataTypes.STRING,
content: DataTypes.TEXT,
});
User.hasMany(Post);
Post.belongsTo(User);const UserRole = sequelize.define("UserRole", {});
User.belongsToMany(Role, { through: UserRole });
Role.belongsToMany(User, { through: UserRole });const user = await User.findByPk(1);
const posts = await user.getPosts();const userWithPosts = await User.findOne({
where: { id: 1 },
include: Post,
});const transaction = await sequelize.transaction();
try {
await User.create({ name: "Samnang" }, { transaction });
await transaction.commit();
} catch (error) {
await transaction.rollback();
}const users = await sequelize.query("SELECT * FROM Users", { type: Sequelize.QueryTypes.SELECT });
console.log(users);const Product = sequelize.define("Product", {
name: { type: DataTypes.STRING, unique: true },
});const User = sequelize.define("User", {
email: {
type: DataTypes.STRING,
validate: {
isEmail: true,
},
},
});User.beforeCreate((user) => {
user.name = user.name.toUpperCase();
});For more details, refer to the official Sequelize documentation.