安装
$ npm i sequelize --save // 安装sequelize
$ npm i mysql2 --save // 安装mysql
这里使用的是mysql数据库,可以官方文档中查看其他数据库连接方法
连接
//db.js
const { Sequelize } = require('sequelize'); // 导入sequelize模块
//实例化 Sequelize
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'host',
dialect: 'mysql',
dialectOptions:{
dateStrings:true, // 使用日期格式化
... //其他数据库配置
}
});
sequelize.authenticate(); //连接数据库
module.exports = sequelize
定义 model
//model.js
const { DataTypes,Model } = require('sequelize');
const sequelize = require('db.js')
//article
class Article extends Model {}
Article.init({
id: {
type: DataTypes.INTEGER, // 类型
allowNull: false, // 是否允许为空
autoIncrement: true, // 是否自增
primaryKey: true // 是否主键
},
title: {
type: DataTypes.STRING,
unique:true, // 是否唯一
allowNull: false
},
category_id:{
type: DataTypes.INTEGER,
allowNull: false
}
}, {
sequelize, // 数据库连接实例
timestamps: false, // 是否默认使用时间戳字段,为false时会默认为在查询加上updateAt和createAt字段。
freezeTableName: true, //冻结表名,false时会自动把表已复数(Articles)形式查询
tableName: 'article' // 指定表名,不指定默认为Articles
})
//category
class Category extends Model {}
Category.init({
id: {
type: DataTypes.INTEGER, // 类型
allowNull: false, // 是否允许为空
autoIncrement: true, // 是否自增
primaryKey: true // 是否主键
},
name: {
type: DataTypes.STRING,
unique:true, // 是否唯一
allowNull: false
},
}, {
sequelize, // 数据库连接实例
timestamps: false,
freezeTableName: true,
tableName: 'category'
})
//绑定关系,一对多
//关联模型时需在同一个js文件中,不然可能会报错
//可以分开文件定义模型,在同一个js文件关联模型并导出
Article.belongsTo(Category,{
foreignKey:'category_id',//外键
})
Category.hasMany(Article,{
foreignKey:'category_id',//外键
})
//导出model
module.exports={
Article,
Category
}
分页查询
const {Article, Category} = require('model.js') // 导入模型
//分页查询
let index = 1
let size = 10
Article.findAndCountAll({
//排序
order: [
['create_time', 'desc']
],
//联表
include: [{model:Category}],
offset: (index-1) * size,
limit: size,
})
条件查询
const {Article, Category} = require('model.js') // 导入模型
//分页查询
let index = 1
let size = 10
Category.findAll({
//联表 attributes:联表需要查询的字段
include: [{model:Article,attributes:[]}],
//主表需要查询的字段
attributes:[
'id',
'name',
//聚合查询
[sequelize.fn('COUNT', sequelize.col('Articles.category_id')), 'count']
],
group:'Category.id',
})