📜  in sequelize - Javascript (1)

📅  最后修改于: 2023-12-03 15:31:23.342000             🧑  作者: Mango

Sequelize - 用Javascript开发ORM库

Sequelize是一个Javascript ORM(Object-Relational Mapping)库,可以帮助开发者通过Javascript代码直接操作数据库,同时避免了使用原生SQL的繁琐和易错。Sequelize支持MySQL,PostgreSQL,SQLite和Microsoft SQL Server等关系型数据库。

安装

Sequelize可以通过npm安装:

npm install sequelize

同时,根据使用的数据库类型,还需要安装相应的驱动程序。

连接数据库

首先,需要在代码中配置及建立与数据库的连接。在Sequelize中,可以通过Sequelize()构造器进行配置及连接数据库。

const { Sequelize } = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql'
});
定义模型

定义模型是使用Sequelize的首要步骤。可以通过sequelize.define()方法定义。这个方法需要传递定义的表名、表中的字段、以及表的选项。

const { Sequelize, DataTypes } = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql'
});

const User = sequelize.define('User', {
  username: {
    type: DataTypes.STRING,
    allowNull: false
  },
  email: {
    type: DataTypes.STRING,
    allowNull: false
  },
  password: {
    type: DataTypes.STRING,
    allowNull: false
  }
}, {
  timestamps: false
});

module.exports = User;

上述代码中,我们定义了一个名为User的模型,并规定了三个字段:usernameemailpassword。其中,timestamps选项用于禁用默认的createdAtupdatedAt字段。

进行操作
新增

向数据库中插入数据可以通过调用模型的create()方法实现。

const User = require('./models/user');

User.create({
  username: 'testuser',
  email: 'testuser@example.com',
  password: '123456'
});
查询

Sequelize支持多种查询方式,包括基本查询、聚合查询、关联查询等。

基本查询

const User = require('./models/user');

// 对所有用户进行查询
User.findAll().then((users) => {
  console.log(users)
});

// 对特定用户进行查询
User.findOne({ where: { id: 1 } }).then((user) => {
  console.log(user)
});

聚合查询

const User = require('./models/user');
const { Op } = require('sequelize');

// 统计用户数量
User.count().then((count) => {
  console.log(count)
});

// 按条件统计用户数量
User.count({ where: { [Op.and]: [{ username: 'testuser' }, { email: 'testuser@example.com' }] } }).then((count) => {
  console.log(count)
});

// 计算密码字段的平均长度
User.findAll({
  attributes: [[Sequelize.fn('AVG', Sequelize.col('password')), 'passwordAvgLength']]
}).then((result) => {
  console.log(result[0].get('passwordAvgLength'))
});

关联查询

Sequelize支持多种关联类型查询,包括一对一、一对多、多对多等。

const User = require('./models/user');
const Project = require('./models/project');

// Users表与Projects表为一对多关系,返回用户及其相关项目
User.findAll({ include: Project }).then((users) => {
  console.log(users)
});

// Users表与Projects表为多对多关系,返回发起的项目
User.findOne({ where: { id: 1 }, include: { model: Project, as: 'initiatedProjects' } }).then((user) => {
  console.log(user)
});
更新和删除

Sequelize支持对已有数据进行更新和删除操作。

const User = require('./models/user');
const { Op } = require('sequelize');

// 更新用户名
User.update({ username: 'newusername' }, { where: { id: 1 } });

// 删除特定用户
User.destroy({ where: { id: { [Op.gt]: 1 } } });
总结

Sequelize是一款很强大的ORM库,提供了多种操作数据库的方式。通过它,开发者可以方便地操作各种关系型数据库,而无需编写原生SQL语句。