Sequelize 操作 MySQL 数据库

安装

复制代码
npm install --save sequelize

安装驱动程序:

复制代码
npm install --save mysql2

连接到数据库

要连接到数据库,必须创建一个 Sequelize 实例. 这可以通过将连接参数分别传递到 Sequelize 构造函数或通过传递一个连接 URI 来完成:

js 复制代码
const {Sequelize} = require("sequelize");
// 创建数据库连接
const sequelize = new Sequelize('jingmao', 'root', 'root', {
    host: 'localhost',
    dialect: 'mysql',
    logging: false, // 生成的sql语句不在控制台打印
})
// 测试连接
async function MyFn() {
    try {
        await sequelize.authenticate();
        console.log('Connection has been established successfully.');
    } catch (error) {
        console.error('Unable to connect to the database:', error);
    }
}

MyFn();

Sequelize 构造函数接受很多参数. 它们记录在 API 参考中.

在 app.js 中引入文件,执行测试。

js 复制代码
require('./dao/dbConnect')

Express 中使用 Sequelize

连接和初始化数据库

dbConnect.js

js 复制代码
const {Sequelize} = require("sequelize");
// 创建数据库连接
const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASSWORD, {
    host: process.env.DB_HOST,
    dialect: 'mysql',
    logging: false, // 生成的sql语句不在控制台打印
})
// 以对象的形式暴露
module.exports = sequelize;

这里使用了 dotenv 将一些环境变量写到 .env 中,将 .env 添加到 precess.env ,便于管理。

db.js

js 复制代码
// 初始化数据库
const sequelize = require('./dbConnect'); // 数据库连接实例
const adminModel = require('./model/adminModel');
const md5 = require("md5"); // 管理员模型
(async function() {
    // 同步模型和数据表
    await sequelize.sync({
        alter: true
    })
    // 如果没有数据,则初始化数据
    const adminCount = await adminModel.count()
    if (!adminCount) {
        await adminModel.create({
            loginId: 'admin',
            name: '超级管理员',
            loginPwd: md5('123456'),
        })
        console.log('初始化管理员数据成功')
    }
    console.log('数据库初始化完成')
})()

adminModel.js

js 复制代码
const {DataTypes} = require("sequelize")
const sequelize = require("../dbConnect")
// 定义数据表
module.exports = sequelize.define("admin", {
    // id 自动生成 无需手动定义
    loginId: {
        type: DataTypes.STRING,
        allowNull: false,
    },
    loginPwd: {
        type: DataTypes.STRING,
        allowNull: false,
    },
    name: {
        type: DataTypes.STRING,
        allowNull: false
    }
}, {
    freezeTableName: true, // 禁止默认的自动复数化
    createdAt: false, // 关闭默认字段
    updatedAt: false // 关闭默认字段
})

app.js

js 复制代码
// 默认读取项目根目录下的 .env 环境变量文件
require('dotenv').config()
// 引入数据库连接
require('./dao/db')

操作数据库

js 复制代码
const adminModel = require('./model/adminModel')
module.exports.loginDao = async function(loginInfo) {
    return await adminModel.findOne({
        where: {
            loginId: loginInfo.loginId,
            loginPwd: loginInfo.loginPwd
        }
    })
}
相关推荐
JhonKI4 分钟前
【MySQL】日志缓冲区详解 以及 InnoDB内存结构总结
数据库·mysql·oracle
vvilkim1 小时前
MySQL视图:虚拟表的强大功能与应用实践
数据库·mysql
tangjunjun-owen1 小时前
Milvus 2.4 使用详解:从零构建向量数据库并实现搜索功能(Python 实战)
数据库·python·milvus·rag
GalenZhang8881 小时前
langchain4j中使用milvus向量数据库做RAG增加索引
数据库·milvus
闪电麦坤951 小时前
思路解析:第一性原理解 SQL
服务器·数据库·sql
珹洺2 小时前
数据库系统概论(八)SQL单表查询语言超详细讲解(附带例题表格对比带你一步步掌握)
数据库·sql
斌果^O^2 小时前
mysql常用方法
数据库·mysql
全职计算机毕业设计2 小时前
SpringBoot Vue MySQL酒店民宿预订系统源码(支付宝沙箱支付)+代码讲解视频
vue.js·spring boot·mysql
man20172 小时前
基于ssm+mysql的高校设备管理系统(含LW+PPT+源码+系统演示视频+安装说明)
数据库·mysql·ssm
不辉放弃3 小时前
java连数据库
java·mysql