侧边栏壁纸
博主头像
woku博主等级

成功的路上并不拥挤

  • 累计撰写 50 篇文章
  • 累计创建 13 个标签
  • 累计收到 3 条评论

Koa2+Puppeteer爬虫项目-MySQL与Sequelize连接创建与同步表结构

woku
2021-12-10 / 0 评论 / 0 点赞 / 78 阅读 / 2,222 字

创建连接

  • 安装mysql2sequelize
npm install mysql2 sequelize
  • sequelize和mysql建立连接
// sequelize要连接的数据库名称、数据库用户名和密码
const { Sequelize } = require('sequelize')

const seq = new Sequelize('txclass_web', 'root', 'admin123', {
    host: "localhost",
    // 数据库的类型,(Sequelize还可以操作其他类型的数据库)
    dialect: "mysql",
    // 连接池的配置
    pool: {
       max: 5,
       min: 0,
       idle: 100000  // 多久没有连接时候,断开连接
    }
})
  • sequelize和mysql建立连接,进行配置化

config目录下,新建db_config.js

module.exports = {
    mysql: {
        base: {
            host: "localhost",
            dialect: "mysql",
            pool: {
                max: 5,
                min: 0,
                idle: 100000
            }
        },
        conf: ['txclass_web', 'root', 'admin123']
    }
}

在db目录下,新建connection文件夹,进行数据库连接

const { Sequelize } = require('sequelize')
const { mysql } = require('../../config/db_config')
const seq = new Sequelize(...mysql.conf, mysql.base)

// 是否连接成功
seq.authenticate().then(res => {
    console.log('ok')
}).catch(err => {
    console.log(err)
})

创建表结构

  • db目录下,新建models,创建数据表结构,并映射到数据库

slider数据模型

db_types:

const Sequelize  = require('sequelize')
module.exports = {
    Int: Sequelize.INTEGER,
    String: Sequelize.STRING
}
const seq = require('../connection'),
      {Int, String } = require('../../config/db_types')

// define新建表
// define(表名,字段的信息)
const sliderModel = seq.define('slider', {
    cId: {
        // 字段的类型
        type: String,
        // 字段的备注
        comment: 'slider id',
        // 允不允许为空
        allowNull: false,
    },
    href: {
        type: String,
        comment: 'slider href',
        allowNull: false,
    },
    imgUrl: {
        type: String,
        comment: 'slider imgUrl',
        allowNull: false,
    },
    title: {
        type: String,
        comment: 'slider title',
    },
    imgKey: {
        type: String,
        comment: 'slider imgKey',
        allowNull: false,
    },
    status: {
        type: Int,
        // 默认值
        defaultValue: 1,
        comment: 'slider status',
        allowNull: false,
    }
})
module.exports = sliderModel

同步表结构

db目录下新建sync.js用来同步数据表

const seq = require('./connection')
require('./models')
seq.authenticate().then(res => {
    console.log('ok')
}).catch(err => {
    console.log(err)
})
seq.sync({
    force: true
}).then(() => {
    console.log('the table has ok')
    process.exit()
}).catch(err => {
    console.log(err)
})

此时,数据库中已经存在了sliders这张表了

数据入表

将爬虫爬取到的数据插入到sliders表中

把操作数据库的方法都放在server文件夹中,slider.js对sliders表进行操作

// 导入slider模型表
const { sliderModel } = require('../db/models')
class sliderService {
    // 插入数据
    // findOne 查找一条数据
    // update  修改数据
    // create  新增数据
    async addSliderData(data) {
        const cId = data.cId
        const result = await sliderModel.findOne({
            where: {
                cId
            }
        })
        // 如果表中存在,就修改,否则新增
        if (result) {
            return await sliderModel.update(data, {
                where: {
                    cId
                }
            })
        } else {
            return await sliderModel.create(data)
        }
    }
}
module.exports = new sliderService()
0

评论区