sequelize学习笔记
示例:
const Sequelize = require('sequelize');
// 建立连接
const sequelize = new Sequelize('test', 'root', '19931119', {
host: 'localhost',
dialect: 'mysql',//mysql 等
operatorsAiases: false
})
// 1.定义模型Model-fruits (表名,字段名,其它配置)
const Fruit = sequelize.define('fruits', {
name: Sequelize.STRING(20),
price: { type: Sequelize.FLOAT, allowNull: false },
stock: { type: Sequelize.INTEGER, defaultValve: 0 }
}, {
timestamps: false,
getterMethods: {
amount() {
return this.getDataValue('stock') + 'kg'
}
},
setterMethods: {
amount(val) {
const idx = val.indexOf('kg');
const v = val.slice(0, idx);
this.setDataValue('stock', v);
}
}
})
//同步 {force:true},强制同步
Fruit.sync({ force: true })
.then(async () => {
//插入数据
await Fruit.create({ name: '香蕉', price: 3.5 })
fruits = await Fruit.findAll()
//更新实例1 修改amount,触发setterMethods
fruits[0].amount = '16kg';
fruits[0].save();
//更新实例2
await Fruit.update({ price: 3.5 }, { where: { name: '香蕉' } })
//删除
await Fruit.destroy({ where: { name: '香蕉' } })
})
1对多查询
const Sequelize = require('sequelize');
// 建立连接
const sequelize = new Sequelize('test', 'root', '19931119', {
host: 'localhost',
dialect: 'mysql',//mysql 等
operatorsAiases: false
})
// 1:N 示例
const Player = sequelize.define('players', {
name: Sequelize.STRING(20)
})
const Team = sequelize.define('teams', {
name: Sequelize.STRING(20)
})
Player.belongsTo(Team);//放在前面 1端建立关系 查球员属于哪个球队
Team.hasMany(Player);//N端建立关系 球队有几个球员
//这里不是具体某个模型,而是sequelize实例
sequelize.sync({ force: true })
.then(async () => {
//插入数据
await Team.create({ name: '火箭' })
// await Player.create({ name: '哈登', teamId: 1 })
// await Player.create({ name: '保罗', teamId: 1 })
await Player.bulkCreate([{ name: '哈登', teamId: 1 }, { name: '保罗', teamId: 1 }]);
// 关联查询
const players = await Player.findAll({ include: [Team] })
console.log(JSON.stringify(players, null, 2));
})
多对多示例:
const Sequelize = require('sequelize');
// 建立连接
const sequelize = new Sequelize('test', 'root', '19931119', {
host: 'localhost',
dialect: 'mysql',//mysql 等
operatorsAiases: false
})
// N:N 示例
const Fruit = sequelize.define("fruits q", { name: Sequelize.STRING });
const Category = sequelize.define("categories", { name: Sequelize.STRING });
FruitCategory = Fruit.belongsToMany(Category, {
through: "FruitCategory"
});
sequelize.sync({ force: true })
.then(async () => {
// 插入测试数据
await Fruit.create(
{
name: "香蕉",
categories: [{ id: 1, name: "热带" }, { id: 2, name: "温带" }]
}, {
include: [FruitCategory]
}
);
// 多对多联合查询
const fruits = await Fruit.findOne({
where: { name: "香蕉" }, // 通过through指定条件、字段等
include: [{ model: Category, attributes: ['id', 'name'] }]
});
console.log(JSON.stringify(fruits, null, 2));
})
sequelize学习笔记的更多相关文章
- sequelize 学习笔记
使用 eggjs 和 sequelize 进行开发,一些要注意的地方 1.egg 的 egg-sequelize 插件是 sequelize 的V4版本,目前已经更新到V5版本,API有一些变化,比如 ...
- Sequelize 学习笔记(11)- Migrations 迁移
一.作用 类似 git 管理源代码 一样,维护你的 DB. 二.安装 npm install --save sequelize-cli 三.使用 1.构建项目时 node_modules/.bin/s ...
- 《SQL 反模式》 学习笔记
第一章 引言 GoF 所著的的<设计模式>,在软件领域引入了"设计模式"(design pattern)的概念. 而后,Andrew Koenig 在 1995 年造了 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
随机推荐
- koa 项目实战(十一)验证登录和注册的 input
1.验证注册参数 根目录/validation/register.js const Validator = require('validator'); const isEmpty = require( ...
- android studio最新版的安装和配置(3.1.2)
android studio最新版的安装和配置(3.1.2) 下载地址: android studio:http://www.android-studio.org/ JDK:http://www.or ...
- Java中<? extends T>和<? super T>的理解
? 通配符类型 - <? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类; <? super T> 表示类型下界(Java Core中叫超类型限 ...
- intellij import包 顺序调整
intellij中自动import的包顺序与eclipse不太一致,可以参照以下方式进行调整: eclipse中(笔者用的是eclipse luna)导入包的顺序依次是: javajavaxorgco ...
- 错误 MSB6006 CL.exe 已退出,代码为2
环境 WIN10 + VS2019 社区版 按照其他网友的方法说 解决方法: 1 一个类内部的定义返回类型为double的方法种没有写return语句. 2 变量没有初始化也会导致这种情况. 但是设置 ...
- 语音文件 pcm 静默(静音)判断
转载:http://www.voidcn.com/relative/p-fwdkigvh-bro.html pcm 文件存储的是 原始的声音波型二进制流,没有文件头. (1)首先要确认 pcm文件的每 ...
- java使用nio(Paths,Files)遍历文件目录,转成java.io.File
String directory = "C:\\Users\\Administrator\\AppData\\Local\\Temp\\8ad088a2-0bb3-41dc-89d9-2c5 ...
- CentOS8 使用 aliyun 阿里云 镜像站点的方法
CentOS8现已可使用国内的aliyun阿里云镜像站,方法如下: 用cd命令切换到yum.repos目录,备份原始的3个repo文件:cd /etc/yum.repos.d/sudo cp Cent ...
- 冒泡排序到demo
package com.lmy.demoSort; /** * 冒泡排序demo * @author Yubaba * */ public class BubbleSort { public stat ...
- SpringCloud学习(SPRINGCLOUD微服务实战)一
SpringCloud学习(SPRINGCLOUD微服务实战) springboot入门 1.配置文件 1.1可以自定义参数并在程序中使用 注解@component @value 例如 若配置文件为a ...