首页 > 解决方案 > 如何配置 Sequelize ORM 以执行序列化查询

问题描述

我正在开发一个电子应用程序,它同时执行诸如插入、删除、更新等写入查询。我使用的是单一威胁数据库 SQLite,因此如果应用程序同时触发多个写入查询,SQLite 数据库将显示错误Database is locked。那么如何配置 sequelize 来执行序列化查询呢?

const { app } = require('electron')
const { Sequelize } = require('sequelize')
const path = require('path')
const cls = require('cls-hooked')

const namespace = cls.createNamespace('P&C.Beejak')
Sequelize.useCLS(namespace)

const db = new Sequelize({
    dialect: 'sqlite',
    storage: path.join(app.getPath('userData') + '/database', 'database.db'),
})

module.exports = db

标签: javascriptsqliteelectronsequelize.js

解决方案


使用带有正确隔离方法的事务:https ://sequelize.org/master/manual/transactions.html

// You can overwrite the isolationLevel setting globally with an option in the Sequelize constructor:


const { Sequelize, Transaction } = require('sequelize');

const sequelize = new Sequelize('sqlite::memory:', {
  isolationLevel: Transaction.ISOLATION_LEVELS.SERIALIZABLE
});

推荐阅读