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
        }
    })
}
相关推荐
The_Ticker25 分钟前
CFD平台如何接入实时行情源
java·大数据·数据库·人工智能·算法·区块链·软件工程
Elastic 中国社区官方博客31 分钟前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
企鹅侠客36 分钟前
ETCD调优
数据库·etcd
Json_1817901448042 分钟前
电商拍立淘按图搜索API接口系列,文档说明参考
前端·数据库
煎饼小狗1 小时前
Redis五大基本类型——Zset有序集合命令详解(命令用法详解+思维导图详解)
数据库·redis·缓存
永乐春秋1 小时前
WEB-通用漏洞&SQL注入&CTF&二次&堆叠&DNS带外
数据库·sql
打鱼又晒网2 小时前
【MySQL】数据库精细化讲解:内置函数知识穿透与深度学习解析
数据库·mysql
大白要努力!2 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
tatasix3 小时前
MySQL UPDATE语句执行链路解析
数据库·mysql
南城花随雪。3 小时前
硬盘(HDD)与固态硬盘(SSD)详细解读
数据库