electron项目中使用本地数据库sqlite3和sequelize框架

简介: electron项目中使用本地数据库sqlite3和sequelize框架

解决本地需要和云端保持文件信息等共存的需求,本地创建数据库,存储字段及其他信息都与云端相同,不相同则同步云端与本地服务,接下来说一下大概的步骤,具体细节可自行查阅相关文档,如有问题,可随时反馈

解释:

sqlite3只作为本地数据库存储

Sequelize类是引用sequlize模块后获取一个顶级对象,我们通过它来创建sequlize实例,也可以通过该对象来获取模内其它对象的引用,如:Utils工具类、Transaction事务类等。创建实例后,可以通过实例来创建或定义Model(模型)、执行查询、同步数据库结构等操作。

一、安装所需依赖包sqlite3sequelize

安装完sqlite3,需要编译,具体编译方法可参考

electron 编译 sqlite3指南

二、创建本地数据库步骤

   1、创建数据库模型,定义相关存储表字段等

   新建dbUtil/model/tResources.js

const resList = (sequelize, DataTypes) => {
  const resList = sequelize.define("t_resources", {
    id: {type: DataTypes.STRING, unique: true, allowNull: false,primaryKey: true, defaultValue: ''},
    extension: {type: DataTypes.STRING, allowNull: false, defaultValue: ''},
    resourceName: {type: DataTypes.STRING, allowNull: false, defaultValue: ''},
    addTime: {type: DataTypes.DATE, allowNull: false, defaultValue: ''},
    updateTime: {type: DataTypes.DATE, allowNull: false, defaultValue: ''},
  })
  resList.sync().then(function () {
    // Table created
    return resList.create({
      id: '11',
      linkId:"11",
      resourceName: '测试资源',
      resourceUrl:'1234',
    });
  });
  return resList;
}
export default {
  resList
}

2、创建数据库(部分代码)

try {
    //创建数据库
    const connect = new Sequelize('database', '', '', Object.assign({}, conf, {
      host: 'localhost',
      logging: false,
      dialect: 'sqlite',
      storage: dbAbsolutePath,
      dialectOptions: {
          // 字符集
          charset: "utf8mb4",
          collate: "utf8mb4_unicode_ci",
          supportBigNumbers: true,
          bigNumberStrings: true
      },
      pool: {
          max: 5,
          min: 0,
          acquire: 30000,
          idle: 10000
      }
    }))
    // 定义模型
    const dbHandle = new dbUtil.DbResList({}, connect)
    return {dbHandle, connect}
  } catch (e) {
    console.log('数据库创建失败',e)
    throw e
  }

3、根据model ,可以进行数据的新增,删除,修改等操作

新增

let order = {}
  order['field'] = vaule
  order['field'] = (value || 1)
  Order.create(order)

修改

 let order = {}, where = {}
  where['field'] = value //条件
  order['field'] = value //修改的值
  Order.update(order, {where})

删除

 let where = {}
  where['field'] = value //条件
  Order.destroy({where})

查询

let where ={}
 Order.findOne({
    where,
    attributes: ['id',...], //查询的字段
    include: [{model: User, as: 'user'}] //一对多或者多对一的包含复合查询
  })

Sequelize中一些常用的函数

Model.find({
  where: {
    attr1: {
      gt: 50
    },
    attr2: {
      lte: 45
    },
    attr3: {
      in: [1,2,3]
    },
    attr4: {
      ne: 5
    }
  }
})
// where条件等价:
WHERE attr1 > 50 AND attr2 <= 45 AND attr3 IN (1,2,3) AND attr4 != 5
Model.find({
  where: Sequelize.and(
    { name: 'a project' },
    Sequelize.or(
      { id: [1,2,3] },
      { id: { gt: 10 } }
    )
  )
})
// where条件等价:
WHERE name = 'a project' AND (id` IN (1,2,3) OR id > 10)

接下来就是与你的业务进行关联,增删改查等操作,举例如删除一条记录:

    /**
       * 删除一条记录
       * @returns {Promise<{trans: *, affectedCount: *}>}
       */
      async destroyRes (options) {
        const m = this.getResListModel()
        const result = await this.destroyByModel(m, options)
        const list = []
        for (let item of result.rows) {
          list.push(this.formatDbObjectToStand(item.toJSON()))
        }
        return {
          affectedCount: result.affectedCount,
          rows: list
        }
      }


      /**
         * see http://docs.sequelizejs.com/class/lib/model.js~Model.html#static-method-destroy
         * @returns {Promise<{trans: *, affectedCount: *}>}
         */
        async destroyByModel(model, options) {
          const condition = Object.assign({}, options)
          const sequelize = this.sequelizeInstance
          const m = model
          await sequelize.sync()
          try {
            condition.individualHooks = true
            const destroyedNumber = await m.destroy(condition)
            const rowsByCondition = await this.findAllByModel(m, condition)
            return {
              rows: rowsByCondition,
              affectedCount: destroyedNumber
            }
          } catch (e) {
            console.error(e)
            trans.rollback()
            throw e
          }
        }
      

      以上只贴出来部分代码,具体操作及使用详情如有需要,可添加qq群:856402057 进行详细咨询

      交流

      我是老礼,公众号「进军全栈攻城狮」作者 ,对前端技术保持学习爱好者。我会经常分享自己所学所看的干货,在进阶的路上,共勉!

      相关文章
      |
      18天前
      |
      存储 关系型数据库 MySQL
      一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
      一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
      |
      5天前
      |
      JavaScript API
      使用vue3+vite+electron构建小项目介绍Electron进程间通信
      使用vue3+vite+electron构建小项目介绍Electron进程间通信
      62 3
      |
      6天前
      |
      Web App开发 SQL 数据库
      使用 Python 解析火狐浏览器的 SQLite3 数据库
      本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
      17 4
      |
      11天前
      |
      SQL 关系型数据库 MySQL
      Go语言项目高效对接SQL数据库:实践技巧与方法
      在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
      28 11
      |
      1月前
      |
      JavaScript Java 关系型数据库
      毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
      本文介绍了一个基于Spring Boot和Vue.js实现的在线考试系统。随着在线教育的发展,在线考试系统的重要性日益凸显。该系统不仅能提高教学效率,减轻教师负担,还为学生提供了灵活便捷的考试方式。技术栈包括Spring Boot、Vue.js、Element-UI等,支持多种角色登录,具备考试管理、题库管理、成绩查询等功能。系统采用前后端分离架构,具备高性能和扩展性,未来可进一步优化并引入AI技术提升智能化水平。
      毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
      |
      14天前
      |
      存储 关系型数据库 数据库
      轻量级数据库的利器:Python 及其内置 SQLite 简介
      轻量级数据库的利器:Python 及其内置 SQLite 简介
      22 3
      |
      15天前
      |
      应用服务中间件 PHP Apache
      PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
      PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
      |
      24天前
      |
      Java 关系型数据库 数据库连接
      SpringBoot项目使用yml文件链接数据库异常
      【10月更文挑战第3天】Spring Boot项目中数据库连接问题可能源于配置错误或依赖缺失。YAML配置文件的格式不正确,如缩进错误,会导致解析失败;而数据库驱动不匹配、连接字符串或认证信息错误同样引发连接异常。解决方法包括检查并修正YAML格式,确认配置属性无误,以及添加正确的数据库驱动依赖。利用日志记录和异常信息分析可辅助问题排查。
      59 10
      |
      18天前
      |
      前端开发 Java 数据库连接
      表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
      本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
      24 0
      表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
      |
      23天前
      |
      Java 关系型数据库 MySQL
      SpringBoot项目使用yml文件链接数据库异常
      【10月更文挑战第4天】本文分析了Spring Boot应用在连接数据库时可能遇到的问题及其解决方案。主要从四个方面探讨:配置文件格式错误、依赖缺失或版本不兼容、数据库服务问题、配置属性未正确注入。针对这些问题,提供了详细的检查方法和调试技巧,如检查YAML格式、验证依赖版本、确认数据库服务状态及用户权限,并通过日志和断点调试定位问题。