1. 什么是 Sequelize 以及为什么需要它
\n\nSequelize 是一个用于 Node.js 的强大 ORM(对象关系映射)库,支持与关系型数据库协同工作:PostgreSQL、MySQL、MariaDB、SQLite 和 Microsoft SQL Server。ORM 允许开发者使用面向对象的方法与数据库交互,而不是编写纯 SQL 查询。
\n\n使用 Sequelize 的主要优势:
\n- \n
- SQL 抽象 — 通过 JavaScript 对象和方法操作表 \n
- 安全性 — 自动防止 SQL 注入 \n
- 迁移 — 管理数据库模式变更 \n
- 关系 — 轻松实现表之间的关联(1:1, 1:M, M:N) \n
- 验证 — 内置数据校验机制 \n
- 事务 — 支持原子操作 \n
Sequelize 非常适合创建 REST API、基于 Express.js 的 Web 应用程序、机器人以及任何需要可靠 SQL 数据库支持的项目。
\n\n2. 安装
\n\n通过 npm 安装 Sequelize 和数据库驱动程序:
\n\n// 基础包\nnpm install sequelize\n\n// PostgreSQL 驱动程序\nnpm install pg pg-hstore\n\n// MySQL 驱动程序\nnpm install mysql2\n\n// SQLite 驱动程序\nnpm install sqlite3\n\n// MSSQL 驱动程序\nnpm install tedious\n\n使用 SQLite 快速启动(无需安装服务器):
\nnpm install sequelize sqlite3\n\n3. 快速入门及代码示例
\n\n创建一个简单的用户管理应用程序:
\n\n// index.js\nconst { Sequelize, DataTypes, Model } = require('sequelize');\n\n// 1. 连接到数据库 (SQLite)\nconst sequelize = new Sequelize({\n dialect: 'sqlite',\n storage: './database.sqlite',\n logging: false // 关闭 SQL 查询日志\n});\n\n// 2. 定义 User 模型\nclass User extends Model {}\nUser.init({\n id: {\n type: DataTypes.INTEGER,\n autoIncrement: true,\n primaryKey: true\n },\n name: {\n type: DataTypes.STRING,\n allowNull: false\n },\n email: {\n type: DataTypes.STRING,\n allowNull: false,\n unique: true,\n validate: {\n isEmail: true\n }\n },\n age: {\n type: DataTypes.INTEGER,\n validate: {\n min: 0,\n max: 150\n }\n }\n}, {\n sequelize,\n modelName: 'User',\n timestamps: true // 添加 createdAt 和 updatedAt\n});\n\n// 3. 同步数据库并执行测试操作\nasync function main() {\n await sequelize.sync({ force: true }); // 重新创建表\n console.log('User 表已创建');\n\n // 创建用户\n const user = await User.create({\n name: '伊万·彼得罗夫',\n email: 'ivan@example.com',\n age: 30\n });\n console.log('已创建用户:', user.toJSON());\n\n // 查找所有用户\n const users = await User.findAll();\n console.log('所有用户:', JSON.stringify(users, null, 2));\n\n // 按 ID 查找\n const foundUser = await User.findByPk(1);\n console.log('找到用户:', foundUser.name);\n\n // 更新\n await User.update({ age: 31 }, { where: { id: 1 } });\n console.log('年龄已更新');\n\n // 删除\n await User.destroy({ where: { id: 1 } });\n console.log('用户已删除');\n}\n\nmain().catch(console.error);\n\n4. 主要方法和函数
\n\n4.1. Sequelize.define() / Model.init()
\n描述: 定义模型(表),指定字段及其类型。
\n参数:
\n- \n
modelName— 模型名称 \n attributes— 字段定义对象 \n options— 模型设置(tableName, timestamps, indexes 等) \n