下面是详细讲解 "Node.js + Sequelize 实现增删改查操作" 的完整攻略。
简介
Sequelize 是一个基于 Node.js 的 ORM(Object-Relational Mapping) 框架,提供了方便的方式操作各种不同类型的数据库。
Node.js 是一个基于 Chrome V8 JavaScript 引擎构建的 JavaScript 运行时,它可以让 JavaScript 在服务器端运行,具有高效、可扩展性、易学易用等优点。
将 Node.js 和 Sequelize 结合使用,可以方便地进行数据库增删改查的操作。
实现
安装依赖
首先需要在项目中安装必要的依赖,包括安装 Node.js 和 Sequelize:
# 安装 Node.js
# 下载地址:https://nodejs.org/en/download/
# 安装 Sequelize
npm install --save sequelize
# 安装 Sequelize 各种数据库的驱动
npm install --save mysql2
npm install --save sqlite3
其中,mysql 和 sqlite 是 Sequelize 支持的数据库类型之一,可根据实际情况进行选择。
创建模型
使用 Sequelize 进行增删改查的操作需要先创建相应的模型。在这里以一个图书管理系统为例,创建 Book 模型。
// book.js
const Sequelize = require('sequelize');
const sequelize = new Sequelize('sqlite::memory:');
const Book = sequelize.define('book', {
title: {
type: Sequelize.STRING,
allowNull: false
},
author: {
type: Sequelize.STRING
},
description: {
type: Sequelize.STRING
},
price: {
type: Sequelize.DECIMAL
}
});
module.exports = Book;
上述代码中,定义了一个名为 Book 的模型,在数据库中对应的表名为 books。
模型中定义了 title、author、description 和 price四个属性,分别为字符串、字符串、字符串和十进制数,其中 title 为必选属性,其他属性均为可选属性。
连接数据库
在使用 Sequelize 进行操作前,需要先进行数据库连接。这里可以使用 sequelize.sync() 方法实现数据库连接。
// app.js
const sequelize = new Sequelize('sqlite::memory:');
sequelize
.sync()
.then(() => {
console.log('Database connected');
})
.catch((err) => {
console.error(`Database connection error: ${err}`);
})
上述代码中,使用 sequelize.sync() 方法连接数据库。如果连接成功,输出 "Database connected"。如果连接失败,输出具体的错误信息。
创建实例
模型定义好后,就可以使用该模型来创建实例。
// app.js
const sequelize = new Sequelize('sqlite::memory:');
const Book = require('./book');
// 创建一个 Book 实例
const book = Book.build({
title: 'Node.js in Action',
author: 'Mike Cantelon',
description: 'Node.js in Action, Second Edition is a thoroughly revised book based on the best-selling first edition.',
price: 39.99
});
上述代码中,创建了一个名为 book 的实例。该实例包括了 Book 模型中定义的所有属性。
查询数据
查询数据是数据库操作中最为常见的操作,使用 Sequelize 查询数据也非常简单。
查询所有数据
查询所有数据可以使用 findAll() 方法:
// app.js
const sequelize = new Sequelize('sqlite::memory:');
const Book = require('./book');
Book.findAll().then((books) => {
console.log(books);
});
上述代码中,使用 Book.findAll() 方法查询所有数据,并通过 then() 方法获取查询结果。在控制台中打印所有查询结果。
根据条件查询
也可以根据条件进行查询,例如根据 title 进行模糊查询。
// app.js
const sequelize = new Sequelize('sqlite::memory:');
const Book = require('./book');
Book.findAll({ where: { title: { [Sequelize.Op.like]: '%Node%' } } }).then((books) => {
console.log(books);
});
上述代码中,使用 Book.findAll() 方法根据 title 进行模糊查询,并通过 then() 方法获取查询结果。在控制台中打印符合条件的查询结果。
新增数据
使用 Sequelize 新增数据,可以使用 create() 方法。
// app.js
const sequelize = new Sequelize('sqlite::memory:');
const Book = require('./book');
Book.create({
title: 'JavaScript: The Good Parts',
author: 'Douglas Crockford',
description: 'JavaScript has bad parts that many times overshadow it’s good parts. Douglas claims JavaScript has, “some of the best parts of any programming language ever created.”',
price: 24.99
}).then(() => {
console.log('New book added');
});
上述代码中,使用 Book.create() 方法添加一本新书,如果添加成功,在控制台中输出 "New book added"。
更新数据
使用 Sequelize 更新数据,可以使用 update() 方法。
// app.js
const sequelize = new Sequelize('sqlite::memory:');
const Book = require('./book');
Book.update(
{ price: 19.99 },
{ where: { title: 'JavaScript: The Good Parts' } }
).then(() => {
console.log('Book updated');
});
上述代码中,使用 Book.update() 方法更新价格。在控制台中输出 "Book updated"。
删除数据
使用 Sequelize 删除数据,可以使用 destroy() 方法。
// app.js
const sequelize = new Sequelize('sqlite::memory:');
const Book = require('./book');
Book.destroy({ where: { title: 'JavaScript: The Good Parts' } }).then(() => {
console.log('Book deleted');
});
上述代码中,使用 Book.destroy() 方法删除一本书。在控制台中输出 "Book deleted"。
示例说明
这里提供两个示例说明,分别是:使用 Express.js 框架,以及使用 MySQL 数据库。
Express.js 示例
下面是一个使用 Express.js 框架,实现增删改查操作的示例。
// app.js
const express = require('express');
const app = express();
const Sequelize = require('sequelize');
const sequelize = new Sequelize('sqlite::memory:', { logging: false });
const Book = sequelize.define('book', {
title: {
type: Sequelize.STRING,
allowNull: false
},
author: {
type: Sequelize.STRING
},
description: {
type: Sequelize.STRING
},
price: {
type: Sequelize.DECIMAL
}
});
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.get('/books', async (req, res) => {
try {
const books = await Book.findAll();
res.send(books);
} catch (err) {
res.status(500).send(err);
}
});
app.post('/books', async (req, res) => {
try {
const book = await Book.create({
title: req.body.title,
author: req.body.author,
description: req.body.description,
price: req.body.price
});
res.send(book);
} catch (err) {
res.status(500).send(err);
}
});
app.put('/books/:id', async (req, res) => {
try {
const [result] = await Book.update(
{
title: req.body.title,
author: req.body.author,
description: req.body.description,
price: req.body.price
},
{ where: { id: req.params.id } }
);
if (result === 1) {
const book = await Book.findByPk(req.params.id);
res.send(book);
} else {
res.status(404).send();
}
} catch (err) {
res.status(500).send(err);
}
});
app.delete('/books/:id', async (req, res) => {
try {
const result = await Book.destroy({ where: { id: req.params.id } });
if (result === 1) {
res.send();
} else {
res.status(404).send();
}
} catch (err) {
res.status(500).send(err);
}
});
sequelize
.sync()
.then(() => {
app.listen(3000, () => {
console.log('Server started');
});
})
.catch((err) => {
console.error(`Server startup error: ${err}`);
});
上述代码中,定义了一个 Express 应用,并使用 Book 模型进行增删改查操作。
GET /books: 查询所有图书数据
POST /books: 新增图书数据
PUT /books/:id: 更新指定 id 的图书数据
DELETE /books/:id: 删除指定 id 的图书数据
MySQL 示例
下面是一个使用 MySQL 数据库,实现增删改查操作的示例。
// app.js
const Sequelize = require('sequelize');
const sequelize = new Sequelize('book_db', 'root', 'password', {
host: 'localhost',
dialect: 'mysql'
});
const Book = sequelize.define('book', {
title: {
type: Sequelize.STRING,
allowNull: false
},
author: {
type: Sequelize.STRING
},
description: {
type: Sequelize.STRING
},
price: {
type: Sequelize.DECIMAL
}
});
sequelize
.authenticate()
.then(() => {
console.log('Database connected');
return sequelize.sync({ force: true });
})
.then(() => {
console.log('Schema synchronized');
return Book.create({
title: 'Node.js in Action',
author: 'Mike Cantelon',
description: 'Node.js in Action, Second Edition is a thoroughly revised book based on the best-selling first edition.',
price: 39.99
});
})
.then(() => {
return Book.findAll();
})
.then((books) => {
console.log(books);
})
.catch((err) => {
console.error(`Database connection error: ${err}`);
});
上述代码中,连接了一个 MySQL 数据库,并使用 Book 模型进行增删改查操作。
首先使用 sequelize.authenticate() 方法进行数据库连接测试,并使用 sequelize.sync() 方法创建表及表结构。然后使用 Book.create() 方法添加一本书,并使用 Book.findAll() 方法查询原有的所有书籍,并输出在控制台中。
结语
以上就是使用 Node.js + Sequelize 进行增删改查操作的相关内容。虽然 Sequelize 提供了很多方便的方法,但在实际开发过程中,需要根据具体业务需求进行选择。同时,在连接数据库时,还需要考虑如何保证数据库的安全性及可扩展性等问题,以便满足长期的发展需求。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Nodejs + sequelize 实现增删改查操作 - Python技术站