Sequelize简介

Sequelize是node.js中的ORM框架,适合使用node去连接关系型数据库,像操作对象一样操作数据库。目前支持sequelize@6.28.0-sequelize@6.35.2版本的适配。

安装

  • 1、安装shentongdb@5.3.0, npm -i shentongdb-5.3.0.tgz,或参照神通数据库手册里“node-shentongdb安装”章节里安装;
  • 2、安装sequelize(版本在6.28.0-6.35.2之间),如: npm -i sequelize@6.33.0,安装sequelize及其依赖包,然后把"sequelize(6.28.0-6.35.2)"文件夹里内容整体复制进node_modules的sequelize,覆盖掉重复的文件。

npm list查看到项目依赖包的情况:

  • +-- sequelize@6.33.0
  • -- shentongdb@5.3.0

注解

node版本说明:应该是支持sequelize指定版本的node版本都可以,测试已知支持的node版本有:v10.24.1、v16.20.2、v20.8.0

数据库连接

const { Sequelize, DataTypes, Model } = require('sequelize');
const oscar = require('shentongdb');

const sequelize = new Sequelize({
    dialect: 'oscar',
    username: 'sysdba',
    password: 'szoscar55',
    host: '127.0.0.1',
    port: 2003,
    database: 'osrdb',
    pool: {
    max: 10,
    min: 0,
    acquire: 30000,
    idle: 10000
    },
    timezone: '+08:00'
});

// 测试连接
sequelize.authenticate()
.then(() => {
    console.log('连接成功!');
})
.catch(err => {
    console.error('连接失败:', err);
});

建表

class User extends Model {}
User.init({
id: {
    type: DataTypes.INTEGER,
    primaryKey: true,
    autoIncrement: true
},
name: {
    type: DataTypes.STRING,
    allowNull: false
},
age: {
    type: DataTypes.INTEGER,
    allowNull: false
}
}, {
sequelize, // 关联 Sequelize 实例
modelName: 'User', // 模型名,与数据表名对应
});

// 创建表
async function createTable() {
    await User.sync();
}

await createTable();

插入数据

async function insert() {
    const user = await User.create({ name: 'John', age: 25 });
    console.log(user.name);
}

await insert();

更新数据

async function update(){
    const user_update = await User.create({ name: 'user_update', age: 25 });

    await User.update({ age: 99 }, {
        where: {
            name: 'user_update'
        }
    });
}

await update();

查询数据

async function select() {
    const users = await User.findAll();
    console.log("All users:", JSON.stringify(users, null, 2));
}

await select();

查询数据

async function _delete(){
    const user_delete = await User.create({ name: 'user_delete', age: 25 });
    await User.destroy({
        where: {
            name: 'user_delete'
        }
    });
}

await _delete();

分页

async function limit_offset(){
    for (var i=0;i<20;i++)
    {
        const user_ls = await User.create({ name: 'user_limit_offset_'+i.toString(), age: 25 });
    }
    console.log(`一共创建了: ${await User.count()} 个`);

    const users0 = await User.findAll({ limit: 4 });
    console.log("第一页:", JSON.stringify(users0, null, 2));

    const users1 = await User.findAll({ offset: 4, limit: 4 });
    console.log(users1);
    console.log("第二页:", JSON.stringify(users1, null, 2));

}

await limit_offset();

排序

async function order(){
    for (var i=0;i<10;i++)
    {
        await User.create({ name: 'order_'+i.toString(), age: 25-i });
    }
    const user_ls =await User.findAll({
        order: ['name'],});
    console.log("name 排序:", JSON.stringify(user_ls, null, 2));

    const user_ls1 =await User.findAll({order: ['age'],});
    console.log("age 排序:", JSON.stringify(user_ls1, null, 2));
}

await order();

日期类型与BLOB类型

class Mode1 extends Model {}
Mode1.init({
col_decimal: {
    type: DataTypes.DECIMAL,
    allowNull: true
},
col_bigint: {
    type: DataTypes.BIGINT,
    allowNull: true
},
col_date: {
    type: DataTypes.DATE,
    allowNull: true
},
col_dateonly: {
    type: DataTypes.DATEONLY,
    allowNull: true
},
col_blob: {
    type: DataTypes.BLOB,
    allowNull: true
}
}, {
sequelize, // 关联 Sequelize 实例
modelName: 'Mode1', // 模型名,与数据表名对应
});

async function test() {
    let date1 = new Date(2023, 6, 20);
    let binaryNumber = 0b1010;
    await Mode1.sync();
    for (var i=0;i<5;i++)
    {
    const mode1 = await Mode1.create({
        col_decimal: 1.234,
        col_bigint: 123456789,
        col_date:date1,
        col_dateonly:date1,
        col_blob:binaryNumber,
    });}
}

await test();