【node】Sequelize常用操作、基本增刪改查
- sequelize初始化
- 基本增刪改查的寫法
- SELECT * FROM 表名 WHERE 屬性名 = 值
- SELECT * FROM 表名
- SELECT * FROM 表名 OREDER BY 屬性名 DESC LIMIT 3
- SELECT count(*) AS count FROM 表名
- SELECT max(屬性名) AS max FROM 表名
- SELECT min(屬性名) AS min FROM 表名
- SELECT sum(屬性名) AS sum FROM 表名
- INSERT INTO 表名 VALUES('value1', ...)
- UPDATE 表名 SET 屬性名1=新值 WHERE 屬性名2=值
- DELETE FROM 表名 WHERE 屬性名=值
sequelize初始化
先初始化一個數據庫實例
// 實例化數據庫對象-數據庫連接池
var sequelize = new Sequelize(
CONFIG.MYSQL.database, //數據庫名
CONFIG.MYSQL.username, //賬號
CONFIG.MYSQL.password, //密碼
{
host: CONFIG.MYSQL.host,//端口,一般爲localhost
// 數據庫類型
dialect: 'mysql',
// 是否打印日誌
logging: CONFIG.DEBUG ? console.log : false,
// 配置數據庫連接池
pool: {
max: 5,
min: 0,
idle: 10000
},
// 時區設置
timezone: '+08:00'
});
再初始化一個model實例
// 定義model
const Wish = db.define('Wish', {
// 定義主鍵,autoIncrement 選項用於創建一個自增的整型列
id: {type: Sequelize.INTEGER, primaryKey: true, allowNull: false, autoIncrement: true},
// 日期默認值 => 當前時間
myDate: { type: Sequelize.DATE, defaultValue: Sequelize.NOW },
// 添加唯一(unique)約束後插入重複值會報錯
someUnique: {type: Sequelize.STRING, unique: true},
// 可以通過 "field" 屬性來指定數據庫中的字段名
fieldWithUnderscores: { type: Sequelize.STRING, field: "field_with_underscores" },
}, {
// 是否支持駝峯
underscored: true,
// MySQL數據庫表名
tableName: 'wish',
});
sequelize的數據類型
Sequelize.STRING // VARCHAR(255)
Sequelize.STRING(1234) // VARCHAR(1234)
Sequelize.STRING.BINARY // VARCHAR BINARY
Sequelize.TEXT // TEXT
Sequelize.TEXT('tiny') // TINYTEXT
Sequelize.INTEGER // INTEGER
Sequelize.BIGINT // BIGINT
Sequelize.BIGINT(11) // BIGINT(11)
Sequelize.FLOAT // FLOAT
Sequelize.FLOAT(11) // FLOAT(11)
Sequelize.FLOAT(11, 12) // FLOAT(11,12)
Sequelize.REAL // REAL PostgreSQL only.
Sequelize.REAL(11) // REAL(11) PostgreSQL only.
Sequelize.REAL(11, 12) // REAL(11,12) PostgreSQL only.
Sequelize.DOUBLE // DOUBLE
Sequelize.DOUBLE(11) // DOUBLE(11)
Sequelize.DOUBLE(11, 12) // DOUBLE(11,12)
Sequelize.DECIMAL // DECIMAL
Sequelize.DECIMAL(10, 2) // DECIMAL(10,2)
Sequelize.DATE // DATETIME for mysql / sqlite, TIMESTAMP WITH TIME ZONE for postgres
Sequelize.DATE(6) // DATETIME(6) for mysql 5.6.4+. Fractional seconds support with up to 6 digits of precision
Sequelize.DATEONLY // DATE without time.
Sequelize.BOOLEAN // TINYINT(1)
Sequelize.ENUM('value 1', 'value 2') // An ENUM with allowed values 'value 1' and 'value 2'
Sequelize.ARRAY(Sequelize.TEXT) // Defines an array. PostgreSQL only.
Sequelize.JSON // JSON column. PostgreSQL only.
Sequelize.JSONB // JSONB column. PostgreSQL only.
Sequelize.BLOB // BLOB (bytea for PostgreSQL)
Sequelize.BLOB('tiny') // TINYBLOB (bytea for PostgreSQL. Other options are medium and long)
Sequelize.UUID // PostgreSQL 和 SQLite 中爲 UUID, MySQL 中爲CHAR(36) BINARY (使用 defaultValue: Sequelize.UUIDV1 或 Sequelize.UUIDV4 生成默認值)
Sequelize.RANGE(Sequelize.INTEGER) // Defines int4range range. PostgreSQL only.
Sequelize.RANGE(Sequelize.BIGINT) // Defined int8range range. PostgreSQL only.
Sequelize.RANGE(Sequelize.DATE) // Defines tstzrange range. PostgreSQL only.
Sequelize.RANGE(Sequelize.DATEONLY) // Defines daterange range. PostgreSQL only.
Sequelize.RANGE(Sequelize.DECIMAL) // Defines numrange range. PostgreSQL only.
Sequelize.ARRAY(Sequelize.RANGE(Sequelize.DATE)) // Defines array of tstzrange ranges. PostgreSQL only.
Sequelize.GEOMETRY // Spatial column. PostgreSQL (with PostGIS) or MySQL only.
Sequelize.GEOMETRY('POINT') // Spatial column with geomerty type. PostgreSQL (with PostGIS) or MySQL only.
Sequelize.GEOMETRY('POINT', 4326) // Spatial column with geomerty type and SRID. PostgreSQL (with PostGIS) or MySQL only.
基本增刪改查的寫法
SELECT * FROM 表名 WHERE 屬性名 = 值
寫法:
model對象名
.findOne({ where: {屬性名: 值}}).then(function(result) {
console.log(result.dataValues)
})
SELECT * FROM 表名
寫法:
model對象名
.findAll({
raw: true
}).then(function(result) {
console.log(result)
})
SELECT * FROM 表名 OREDER BY 屬性名 DESC LIMIT 3
寫法:
model對象名
.findAll({
limit: 3,
order: [['屬性名', 'DESC']]
}).then(function(result) {
result.forEach((v) => {
console.log(v.dataValues);
});
})
SELECT count(*) AS count FROM 表名
寫法:
model對象名
.count().then(function(c) {
console.log("表中有" + c + " 個元素")
})
SELECT max(屬性名) AS max FROM 表名
寫法:
model對象名
.max('屬性名').then(function(c) {
console.log("表中最大值爲" + c)
})
SELECT min(屬性名) AS min FROM 表名
寫法:
model對象名
.min('屬性名').then(function(c) {
console.log("表中最小值爲" + c)
})
SELECT sum(屬性名) AS sum FROM 表名
寫法:
model對象名
.sum('屬性名').then(function(c) {
console.log("表中求和爲" + c)
})
INSERT INTO 表名 VALUES(‘value1’, …)
model對象名
.create({
屬性名1 : 值,
屬性名2 : 值,
屬性名3 : 值,
...
});
UPDATE 表名 SET 屬性名1=新值 WHERE 屬性名2=值
model對象名
.update({
屬性名1: 新值,
},
{
where:{屬性名2:值}
});
DELETE FROM 表名 WHERE 屬性名=值
model對象名
.destroy({
where: {屬性名:值}
});