node学习—Sequelize模型定义与同步

本文介绍如何使用Sequelize ORM框架连接数据库、定义模型并同步模型到数据库。包括安装配置、模型定义、同步操作等关键步骤。

一、入门

1.准备

Sequelize 的使用可以通过 npm (或 yarn).

npm install --save sequelize

你还必须手动为所选数据库安装驱动程序:

# 选择以下之一:
$ npm install --save pg pg-hstore # Postgres
$ npm install --save mysql2
$ npm install --save mariadb
$ npm install --save sqlite3
$ npm install --save tedious # Microsoft SQL Server

2.连接数据库

//db.js
const { Sequelize } = require('sequelize');

const sequelize = new Sequelize('myschool', 'root', '123456', {//这里是你的mysql的信息
  host: 'localhost',
  dialect: "mysql",
  logging: null  //该属性会省略操作数据库的日志输出,但会是去一些信息,所以后面我没有使用
});

module.exports = sequelize;
//index.js
const sequelize = require("./models/db");
(async function(){
  try {
    await sequelize.authenticate();
    console.log('Connection has been established successfully.');
  } catch (error) {
    console.error('Unable to connect to the database:', error);
  }
})();

在这里插入图片描述

运行,连接会短时间等待,发现没有继续连接后结束

在这里插入图片描述

3.关闭连接

默认情况下,Sequelize 将保持连接打开状态,并对所有查询使用相同的连接. 如果你需要关闭连接,请调用 sequelize.close()(这是异步的并返回一个 Promise).

二、模型基础

模型是 Sequelize 的本质. 模型是代表数据库中表的抽象. 在 Sequelize 中,它是一个 Model 的扩展类.

该模型告诉 Sequelize 有关它代表的实体的几件事,例如数据库中表的名称以及它具有的列(及其数据类型).

使用 sequelize.define:

const sequelize = require("./db");
const { DataTypes } = require("sequelize");
const Admin = sequelize.define("Admin", {
  loginId: {
    type: DataTypes.STRING, //值类型
    allowNull: false, //非空,默认为true
  },
  loginPwd: {
    type: DataTypes.STRING,
    allowNull: false,
  },
});
(async function () {
  await Admin.sync({
    alter: true //这将检查数据库中表的当前状态(它具有哪些列,它们的数据类型等),然后在表中进行必要的更改以使其与模型匹配.
  });
  console.log("模型Admin同步完毕!");
})();
module.exports = Admin;

在这里插入图片描述
此时回到myschool数据库,发现admins表已经同步完成:
这里还会自动帮我们创建两个值,创建时间和修改时间
在这里插入图片描述
如果我们不需要这两个值:

const Admin = sequelize.define("Admin", {
  loginId: {
    type: DataTypes.STRING,
    allowNull: false,
  },
  loginPwd: {
    type: DataTypes.STRING,
    allowNull: false,
  },
},{
  createdAt: false, //如果不填false,可以使用字符值重新命名
  updatedAt: false,
});

在这里插入图片描述
可以增加一个删除时间的值:

const Admin = sequelize.define("Admin", {
  loginId: {
    type: DataTypes.STRING,
    allowNull: false,
  },
  loginPwd: {
    type: DataTypes.STRING,
    allowNull: false,
  },
},{
  createdAt: false,
  updatedAt: false,
  paranoid: true //从此以后,该表的数据不会真正的删除,而是增加一列deletedAt,记录删除的时间
});

在这里插入图片描述
接下来我们通过重复练习该操作,创建班级表,学生表,书籍表
由于创建多次表,所以我们可以一起使用同步所有的模型:

//sync.js
// 同步所有模型
require("./Admin");
require("./Book");
require("./Class");
require("./Student");
const sequelize = require("./db");
sequelize.sync({ alter: true }).then(() => {
  console.log("所有模型同步完成");
});

最后只需要在入口文件导入公共同步模型即可

//index.js
require("./models/sync");

如果需要使用外键,可以这样操作:

在这里插入图片描述

博主开始运营自己的公众号啦,感兴趣的可以关注“飞羽逐星”微信公众号哦,拿起手机就能阅读感兴趣的文章啦!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞羽逐星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值