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组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
随机推荐
- @Transactional(事务讲解)和springboot 整合事务
概述 事务在编程中分为两种:声明式事务处理和编程式事务处理 编程式事务处理:编码方式实现事务管理,常与模版类TransactionTemplate(推荐使用) 在业务代码中实现事务. 可知编程式事务每 ...
- springboot 静态资源访问,和文件上传 ,以及路径问题
springboot 静态资源访问: 这是springboot 默认的静态资源访问路径 访问顺序依次从前到后(http://localhost:8080/bb.jpg) spring.resourc ...
- C++ STL——输入输出流
[TOC] 注:原创不易,转载请务必注明原作者和出处,感谢支持! 注:内容来自某培训课程,不一定完全正确! 一 缓冲区 (1)标准输入:从键盘输入数据到程序(input) (2)标准输出:程序数据输出 ...
- nodejs的事件循环1
JavaScript的学习零散而庞杂,因此很多时候我们学到了一些东西,但是却没办法感受到自己的进步,甚至过了不久,就把学到的东西给忘了.为了解决自己的这个困扰,在学习的过程中,我一直试图在寻找一条核心 ...
- 微服务的脚手架Jhipster使用(一)
随着微服务的普及以及docker容器的广泛应用,有传统的soa服务衍生出微服务的概念,微服务强调的是服务的独立性,屏蔽底层物理平台的差异,此时你会发现微服务跟容器技术完美契合.在此基础上衍生出的云原生 ...
- linux下的缓存机制buffer、cache、swap
一.缓存机制介绍 在Linux系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果 ...
- delphi数据集查找不定位
procedure TForm1.Button2Click(Sender: TObject); var R: Variant; begin R := MemTableEh1.Lookup('Name' ...
- 一、Node.js安装及环境配置之Windows篇
一.安装环境 1.本机系统:Windows 10 Pro(64位)2.Node.js:v6.9.2LTS(64位) 二.安装Node.js步骤 1.下载对应你系统的Node.js版本:https:// ...
- 20190526 - CentOS 7 中 安装 MySQL 8 并授权 root 远程访问
1. CentOS 7 中 安装 MySQL 8 CentOS 7 中内置 MariaDB 建议升级一下用,性能好很多.但如果一定要用 MySQL 8,就得自己装. 坦白的说,Oracle 升级 My ...
- Microsoft Hackathon 2019 留念
参加今年微软的 Hackathon 是 2019 年 7 月份的事情,但是后来各种各样的事情,考托.考G.网申……就给耽搁了.我本来以为自己的记忆力足够好,几个月以后也能写很多东西,然鹅……现在发现好 ...