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();