Sequelize 是一个基于 promise 的 Node.js ORM, 目前支持 Postgres, MySQL, MariaDB, SQLite 以及 Microsoft SQL Server. 它具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功能。
Sequelize 遵从 语义版本控制。 支持 Node v10 及更高版本以便使用 ES6 功能。
请通过 Getting started - 入门 来学习更多相关内容. 如果你想要学习 Sequelize API 请通过 API 参考 (英文)。
模型基础
在本教程中,你将学习 Sequelize 中的模型以及如何使用它们.
概念
模型是 Sequelize 的本质. 模型是代表数据库中表的抽象. 在 Sequelize 中,它是一个 Model 的扩展类.
该模型告诉 Sequelize 有关它代表的实体的几件事,例如数据库中表的名称以及它具有的列(及其数据类型).
Sequelize 中的模型有一个名称. 此名称不必与它在数据库中表示的表的名称相同. 通常,模型具有单数名称(例如,User
),而表具有复数名称(例如, Users
),当然这是完全可配置的.
db/index.js:
const sqlite3 = require('sqlite3').verbose()
const { getValuesByNodeEnv } = require('../utils/tools')
const { Sequelize, DataTypes } = require('sequelize')
const { dbFilePath } = getValuesByNodeEnv()
let db = new sqlite3.Database(dbFilePath)
//执行sql语句
const runSql = async (sql) => {
//console.log(sql)
return new Promise((resolve) => {
db.run(sql, (err) => {
resolve(err)
})
})
}
//查询
const queryPromise = async (sql) => {
console.log(sql)
return new Promise((resolve, reject) => {
db.all(sql, function (err, rows) {
if (err) {
reject(err)
} else {
resolve(rows)
}
})
})
}
const sequelizeInit = async () => {
const sequelize = new Sequelize({
dialect: 'sqlite',
storage: dbFilePath,
define: {
freezeTableName: true,
},
})
try {
await sequelize.authenticate()
console.log('Connection has been established successfully.')
} catch (error) {
console.error('Unable to connect to the database:', error)
}
const ipInfo = sequelize.define('ipInfo', {
uid: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: '',
},
ip: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: '',
},
info: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: '',
},
remarks: {
type: DataTypes.STRING,
allowNull: true,
defaultValue: '',
},
})
await sequelize.sync()
return {
sequelize,
ipInfo,
}
}
let sequelize
let ipInfo
sequelizeInit().then((res) => {
sequelize = res.sequelize
ipInfo = res.ipInfo
})
const getSequelizeData = () => {
return {
sequelize,
ipInfo,
}
}
module.exports = {
runSql,
queryPromise,
getSequelizeData,
}
新建和查找:
const { runSql, queryPromise, getSequelizeData } = require('../../db/index')
//根据ip地址建立ip和地理位置映射关系表
const toolsIpInfo = async (req, res) => {
const { ipInfo } = getSequelizeData()
const ipInfoDbList = await ipInfo.findAll()
const ipInfoInstance = await ipInfo.create({ uid, ip, info: JSON.stringify(item) })
console.log(ipInfoInstance.toJSON())
res.send({
code: 200,
data: {
},
message: '成功',
})
}