1.模型了解
介绍:
模型是Sequelize的本质,模型是代表数据库中表的抽象,是我们操作数据库表的重要实质.在sequelize中,它是一个model的扩展类.
该模型告诉sequelize有关它代表的实体的几件事,列如,数据库中表的名称以及它具有的字段及其数据类型(即,通过模型我们可以创建在数据库中创建相应的表及其所拥有的字段以及字段类型.)
Sequelize中的模型有一个名称,此名称不必与它在数据库中表示的表的名称相同,通常,模型具有单数名称(例如: User ),而表具有复数名称(例如: Users),我们也可以自定义表名
(1)创建模型(即创建数据库表的结构)
模型的创建有两种方式
方法一:
调用
sequelize实例对象.define(‘表名’,{表的字段配置},{模型相关配置})
方法二:
(1)扩展model(即通过从sequelize模块中引入Model),
(2)调用 init({表的字段配置},{模型相关配置}) 方法
方法一:
const {
Sequeliz }=require('sequelize'); // 引入sequelize模块
// 创建实例对象并连接数据库
const db=new Sequelize('数据库名','用户名','密码',{
dialect:'mysql', // 数据库类型,支持: 'mysql', 'sqlite', 'postgres', 'mssql'
host:'localhost', // 自定义连接地址,可以是ip或者域名,默认为本机:localhost
port:'3306', // 端口号,默认为3306
logging:true, // 是否开启日志(建议开启,有利于我们查看进行的操作)
pool:{
// 连接池
min:0,
max:5,
idle:30000,
acquire:60000,
}
})
// 创建模型语法
const 模型名称=实例对象.define(
'表名',
{
....表中的字段内容配置
},
{
...模型其他配置
}
)
// 创建模型实例
const User=db.define(
'Users',
{
id:{
type:Sequelize.INTEGER(11),
primaryKey:true, // 是否主键
autoIncrement:true, // 是否自增
},
username:Sequelize.STRING,
passwrod:Sequelize.STRING,
},
{
timestamps:false, // 是否自动监听并创建字段的创建、更新等字段时间点
}
)
方法二:
目前还不会,后面学了再说…
(2)根据模型生成相应的数据库表
注意:必须先创建好模型.
当我们创建好模型后,我们就可以通过相关函数生成相应的表了.
我们有三个可选函数能够根据函数进行相关的表生成判断.
表的生成函数,可选函数,根据需求选择其中之一即可:
(1) 实例对象.sync() ; // 若表不存在,则创建表;若表已经存在,则不做任何操作
(2) 实例对象.sync({force:true}); // 若表不存在,则创建相应的表;若表已经存在,则删除原来的表,重新创建一个新的表.
(3) 实例对象.sync({alter:true}); // 若表不存在,则创建相应的表;若表已经存在,则与原始表进行比对,将原始表比对修改为当前的模型表
....
const db=new Sequelize(......);
const 模型名称=db.define('表名',{
...表配置},{
...其他配置});
db.sync().then(()=>{
console.log('表创建成功')
}).catch(err=>{
console.log('创建失败'+err)
})
表的删除我们通过drop函数来进行操作
drop函数有两种使用方式
方式一:
// 删除指定表
模型名称(即表名).drop().then(()=>console.log(‘删除成功’)).catch(err=>console.log(‘删除失败’))
方式二:
// 删除数据库中的所有表
实例对象.drop().then(()=>console.log(‘删除成功’)).catch(err=>console.log(‘删除失败’))
其他条件操作符(用于进行条件判断或其他操作时使用)
注意:从sequelize中引入Op核心
const {
Op } = require("sequelize");
Post.findAll({
where: {
[Op.and]: [{
a