在现代 Web 应用中,使用 ORM(Object-Relational Mapping) 工具来管理数据库是很常见的。Sequelize 是一个 Node.js ORM 工具,提供了操作多种数据库(如 PostgreSQL、MySQL、SQLite 和 Microsoft SQL Server)的接口。
本文将介绍如何使用 Sequelize 来定义数据模型和执行查询。
数据模型的定义
安装
首先,需要安装 Sequelize:
npm install --save sequelize
同时,需要根据使用的数据库引擎安装相应的驱动,例如 PostgreSQL 需要安装pg
:
npm install --save pg
连接数据库
创建 Sequelize 实例时,需要传入数据库连接信息:
const Sequelize = require("sequelize"); const sequelize = new Sequelize("database", "username", "password", { host: "localhost", dialect: "postgres", // dialect 可以是 'mysql'、'sqlite'、'postgres' 或 'mssql' });
定义模型
定义一个 Sequelize 模型时,唯一必须的参数是需要表示的表名。其他参数是表结构的定义,包括列名、数据类型、默认值等。
以下是一个简单的例子:
-- -------------------- ---- ------- ----- ---- - ------------------------ - ---------- - ----- ----------------- ---------- ------ -- --------- - ----- ----------------- -- ---- - ----- ------------------ -- ---
这段代码将创建一个名为 user
的模型。模型只有三个列:firstName
、lastName
和 age
。
可选参数 allowNull
指定列是否允许为 null
。数据类型定义在 Sequelize
对象中,包括 STRING
、INTEGER
、FLOAT
、BOOLEAN
等等。
模型同步
定义完模型后,需要在数据库中创建相应的表。Sequelize 提供了 sequelize.sync()
方法来同步模型和数据库结构:
const sequelize = new Sequelize("database", "username", "password", { host: "localhost", dialect: "postgres", }); // ... sequelize.sync();
sequelize.sync()
返回一个 Promise
,在同步完成后调用。该方法将在数据库中创建匹配模型定义的表,如果表已经存在,将更新表结构(增加/删除列等)。
例子
以下是一个完整的例子。模型定义了一个名为 Article
的表,该表具有 id、title、body 和 createdAt 列:
-- -------------------- ---- ------- ----- --------- - --------------------- -- ----------- ---------- ----- --------- - --- --------------------- ----------- ----------- - ----- ------------ -------- ----------- --- -- ---- ----- ------- - --------------------------- - ------ - ----- ----------------- ---------- ------ -- ----- - ----- --------------- ---------- ------ -- ---------- - ----- --------------- ------------- -------------- -- --- -- ---------- ------------------------ -- - ---------------- ------- ----- --- ---- ------- --- ---------- ---
查询
Sequelize 提供了非常灵活的查询接口。本节将介绍如何使用 Sequelize 查询数据库。
创建一个实例
要对数据库进行查询,需要首先创建一个 Sequelize 实例:
-- -------------------- ---- ------- ----- --------- - --------------------- ----- --------- - --- --------------------- ----------- ----------- - ----- ------------ -------- ----------- --- -- ------------- ------- - ----- ------- - --------------------------- - ------ - ----- ----------------- ---------- ------ -- ----- - ----- --------------- ---------- ------ -- ---------- - ----- --------------- ------------- -------------- -- ---
查询全部记录
使用 findAll()
方法可以查询数据库中的全部记录。以下代码查询数据库中的全部文章:
const articles = await Article.findAll(); console.log(articles);
findAll()
方法返回一个 Promise
,当查询完成后调用。查询结果是一个数组,包含查询到的所有记录。
条件查询
使用 findAll()
方法的 where
参数可以指定条件查询。以下代码查询标题为 "Sequelize 学习笔记" 的文章:
const articles = await Article.findAll({ where: { title: "Sequelize 学习笔记", }, }); console.log(articles);
where
参数是一个包含查询条件的对象。上面的代码只返回符合指定条件的记录。
还可以使用运算符来指定查询条件:
$eq
:等于$ne
:不等于$gt
:大于$gte
:大于等于$lt
:小于$lte
:小于等于$like
:模糊匹配$notLike
:不匹配
例如,以下代码查询标题以 "Sequelize" 开头的文章:
const articles = await Article.findAll({ where: { title: { $like: "Sequelize%", }, }, }); console.log(articles);
增加记录
使用 create()
方法可以在数据库中生成新的记录。以下代码创建一篇新的文章:
const newArticle = await Article.create({ title: "My New Sequelize Article", body: "This is the body of my new article. Enjoy!", }); console.log(newArticle);
create()
方法返回一个 Promise
,当添加记录的操作完成后调用。回调函数返回新记录的详细信息。
更新记录
使用 update()
方法可以更新数据库中的一个或多个记录。以下代码将标题为 "My New Sequelize Article" 的文章的标题更新为 "My Renamed Sequelize Article":
-- -------------------- ---- ------- ----- ------ - ----- --------------- - ------ --- ------- --------- --------- -- - ------ - ------ --- --- --------- --------- -- - -- --------------------
update()
方法返回一个 Promise
。回调函数将包含一个数组,给出数据库表中删除的项目数量。
需要注意的是,在更新数据时,必须传递一个包含更新内容的对象。更新条件是 where
参数中的对象。
删除记录
使用 destroy()
方法可以从数据库中删除一个或多个记录。以下代码将标题为 "My Renamed Sequelize Article" 的文章删除:
const result = await Article.destroy({ where: { title: "My Renamed Sequelize Article", }, }); console.log(result);
destroy()
方法返回一个 Promise
。回调函数将包含一个数字,指示删除的记录数。
总结
Sequelize 是一个方便管理关系型数据库的工具。本文中,我们介绍了如何使用 Sequelize 来定义模型和查询数据。使用 Sequelize 可以更轻松地操作数据库,希望本文对您有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65185b6595b1f8cacd0c03af