node 使用 sequelize 操作数据库不完全指北

本文档详细介绍了如何在Node.js环境中使用Sequelize库连接和操作MySQL数据库,包括安装依赖、建立数据库连接、手动及自动生成模型、以及基本的增删改查操作。内容涵盖连接参数、数据类型、验证规则和sequelize-auto工具的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开始步骤

npm init -y

安装依赖

npm i sequelize mysql2 standard --save

连接数据库

建立连接

新建一个 db.js

// 引入依赖
let Sequelize = require('sequelize')

// 导出新建的连接数据库实例,方便在其它文件中引用
module.exports = new Sequelize('test', 'root', 'root123', {
    // 数据库地址
    host: '192.168.5.43',
    // 使用的数据库方言
    dialect: 'mysql',
    pool: {
        // 连接池中最大连接数量
        max: 5,
        // 连接池中最小连接数量
        min: 0,
        // 超时时间,如果10S中没有使用,那么释放线程
        idle: 10000
    }
})

新建实例的几种方式

  1. 使用参数连接,本质上是:

    new Sequelize(database, [username=null], [password=null], [options={}])
    // 熟悉ES6的同学应该都知道函数的默认参数,这里面除了 database 名是必须的以外,其它的都是使用默认参数的
    // 所以我们可以通过这个推理出下面的几种连接方式
    1. 没有password 和 options

      new Sequelize('database', 'username')
    2. 没有 options

      new Sequelize('database', 'username', 'password')
    3. 没有密码但是有 options

      new Sequelize('database', 'username', null, {})
    4. 全部都有

      new Sequelize('database', 'username', 'password', {})
  2. 当然,还有一种特殊的连接方式,那就是直接使用链接,它的本质上是这样的,即 options 有默认参数

    new Sequlize(URI, [options={}])
    1. 只有 URI 没有 options

      new Sequelize('mysql://localhost:3306/database')
    2. 全有

      new Sequelize('mysql://localhost:3306/database', {})

测试连接

新建一个 testconnet.js

const conn = require('./db')

// 使用 sequlize 官方提供的 zuthenticate 来测试是否连接,使用的是 Promise 风格
conn.authenticate().then(() => console.log('connected')).catch(err => console.log(err))

操作数据库

定义模型

手动定义模型

const Sequelize = require('sequelize')
const sequelize = require('../db')

// 先定义好对应的实例,如表名, 列名等
const User = sequelize.define('user', {
  firstName: {
    type: Sequelize.STRING,
    validate: {
        notNull: true
    }
  },
  lastName: {
    type: Sequelize.STRING,
    validate: {
        notNull: true
    }
  }
})

// 创建表,使用的是 sync 方法,该方法返回一个 Promise 对象,可以使用 then, catch 来进行后续操作
// 该方法有一个参数,那就是 force ,参数为 boolean 型,如果为 true ,那么会删除原表再创建,如果为 false 那么不会删除原表
User.sync({force: true}).then(() => console.log('SUCCESS CREATE TABLE USER')).catch(err => console.log(err))


// 删除表
User.drop()
常用数据类型
名称对应数据库
Sequelize.STRINGVARCHAR(255)
Sequelize.STRING(1234)VARCHAR(1234)
Sequelize.STRING.BINARYVARCHAR BINARY
Sequelize.TEXTTEXT
Sequelize.TEXT(‘tiny’)TINYTEXT
Sequelize.INTEGERINTEGER
Sequelize.BIGINTBIGINT
Sequelize.BIGINT(11)BIGINT(11)
Sequelize.FLOATFLOAT
Sequelize.FLOAT(11)FLOAT(11)
Sequelize.FLOAT(11, 12)FLOAT(11,12)
Sequelize.DOUBLEDOUBLE
Sequelize.DOUBLE(11)DOUBLE(11)
Sequelize.DOUBLE(11, 12)DOUBLE(11,12)
Sequelize.DECIMALDECIMAL
Sequelize.DECIMAL(10, 2)DECIMAL(10,2)
Sequelize.DATEDATETIME
Sequelize.DATE(6)DATETIME(6)
Sequelize.DATEONLYDATE without time.
Sequelize.BOOLEANTINYINT(1)

Sequelize 支持的一些数据类型。 有关完整和更新的列表, 参阅 DataTypes.

常用验证
属性参数详情
is[“\^[a-z]+$”,’i’]只允许字母
is/\^[a-z]+$/i与上一个示例相同,使用了真正的正则表达式
not[“[a-z]”,’i’]不允许字母
isEmailtrue检查邮件格式 (foo@bar.com)
isUrltrue检查连接格式(http://foo.com)
isIPtrue检查IPv4(129.89.23.1)或IPv6格式
isIPv4true检查IPv4(129.89.23.1)格式
isIPv6true检查IPv6格式
isAlphatrue只允许字母
isAlphanumerictrue只允许使用字母数字
isNumerictrue只允许数字
isInttrue检查是否为有效整数
isFloattrue检查是否为有效浮点数
isDecimaltrue检查是否为任意数字
isLowercasetrue检查是否为小写
isUppercasetrue检查是否为大写
notNulltrue不允许为空
isNulltrue只允许为空
notEmptytrue不允许空字符串
equals‘specificvalue’只允许一个特定值
contains‘foo’检查是否包含特定的子字符串
notIn[[‘foo’,’bar’]]检查是否值不是其中之一
isIn[[‘foo’,’bar’]]检查是否值是其中之一
notContains‘bar’不允许包含特定的子字符串
len[2,10]只允许长度在2到10之间的值
isUUID4只允许uuids
isDatetrue只允许日期字符串
isAfter“2011-11-05”只允许在特定日期之后的日期字符串
isBefore“2011-11-05”只允许在特定日期之前的日期字符串
max23只允许值<=23
min23只允许值>=23
isCreditCardtrue检查有效的信用卡号码

当然也可以写自定义验证规则

isEven(value) {
    if (parseInt(value) % 2 != 0) {
      throw new Error('Only even values are allowed!')
      // 我们也在模型的上下文中,所以如果它存在的话, 
      // this.otherField会得到otherField的值。
    }
}

有关内置验证方法的更多详细信息,请参阅the validator.js project 。

自动生成模型

当然很多情况下,数据库中已经事先定义好了表,那么我们再一个个的重复写着 modle 那就没有一点意义,这个时候我们就需要通过 sequelize-auto 来自动生成对应模型

安装依赖
npm i sequelize-auto -g
然后在对应的项目下使用命令生成modle
sequelize-auto -h localhost -d test -u root -x root123 -p 3306
常用参数解释
参数含义
-hmysql 服务地址
-d操作的数据库
-x密码
-u用户名
-p接口
-t要生成的表,如果不填的话,那么生成全部表
-T不要生成的表

sequelize-auto 官方文档

使用
const Sequelize = require('sequelize')
const sequelize = require('../db')
const user = require('./users')

// 然后就可以这么使用了,这样的话就与我们之前自己创建的表操作汉典有任何区别
let User = user(sequelize,Sequelize)
User.sync()

module.exports = User

使用模型

增加

依旧使用上面创建的 User 表为例

const conn = require('./db')
const User = require('./hand-module/user')

User.create({
    firstName: 'Hello',
    lastName: 'World'
})

User.create({
    firstName: 'Hello',
    lastName: 'JavaScript'
})

删除

const conn = require('./db')
const User = require('./hand-module/user')

User.destroy({where: {lastName: 'World'}})

修改

const conn = require('./db')
const User = require('./hand-module/user')

User.update({firstName: 'LOVE'},{where: {firstName: 'Hello'}})

查找

User.findOne({where: {lastName: 'JavaScript'}}).then(data => {
  console.log(data.dataValues)
})
User.findAll({where: {firstName: 'LOVE'}}).then(data=>{
    for(let i in data){
        console.log(data[i].dataValues)
    }
})

当然还有好多其它方法,这里只介绍了最简单的几个增删改查了

static-method参考文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值