首页>>前端>>Node->egg项目快速创建sequelize的数据表模型

egg项目快速创建sequelize的数据表模型

时间:2023-11-30 本站 点击:0

在使用 node 开发项目的过程中,不可避免要用 model 来映射数据库中的表结构与字段。

什么意思呢?

数据库操作

我们知道,数据库中的表,只能通过 SQL 语句来访问,比如在用户表中查找用户名为admin的用户:

SELECT*FROMusersWHEREname='admin'

而在 node 项目中,当我们需要在数据库中进行增删改查的操作,无非也是通过网络发送增删改查的 sql 语句来实现。

这样做,就带来一些问题

一方面,要求开发人员要掌握 sql 的基本知识,在代码层面能熟练的编写 sql 语句,

另一方面,还要求开发人员有一定的网络安全知识,能避免常见的注入 sql注入 之类的安全漏洞。

而且,这样编写出来的代码也比较底层,可能不太符合程序员的思维。

所以社区就有了 ORM 。

ORM

有些人可能想到,一个数据表和我们页面中常用的 table 表有什么区别呢?

下面是一个 websites 的数据表

+----+--------------+---------------------------+-------+---------+|id|name|url|alexa|country|+----+--------------+---------------------------+-------+---------+|1|Google|https://www.google.cm/|1|USA||2|淘宝|https://www.taobao.com/|13|CN||3|菜鸟教程|http://www.runoob.com/|4689|CN||4|微博|http://weibo.com/|20|CN||5|Facebook|https://www.facebook.com/|3|USA|+----+--------------+---------------------------+-------+---------+

如果表里的数据放到前端的页面里,可能是这样子的:

idnameurlalexacountry1Googlewww.google.cm/1USA2淘宝www.taobao.com/13CN3菜鸟教程www.runoob.com/4689CN4微博weibo.com/20CN5Facebookwww.facebook.com/3USA

而我们的 table 却是从普通的 javascript 数组对象结构渲染而来。比如

vartable=[{id:1,name:'Google',url:'https://www.google.cm/',alexa:1,country:'USA'}...]

如果数据库的增删改查的操作,能和操作普通的 javascript 数组一样,那多好~

于是就产生了 ORM(Object-Relational Mapping)技术,将数据库中的表结构映射为对象,想要操作数据库,直接操作映射的对象就行了。

那如何将数据库中的表映射为代码中的对象呢?

这就要用到 ORM 框架了。

利用 egg-sequelize-auto 快速生成表模型

有时候,我们的数据库已经建表了,而代码中对应的模型(映射对象,以下统称为 model)还没建立,那有什么办法能通过建立好的表来生成 model 吗?

我们这里选择 ORM 框架 sequelize。它是一个基于 Promise 的 node ORM 框架,支持 Postgres, MySQL, MariaDB, SQLite 等多种数据库。

我们要执行的步骤如下,

全局安装 egg-sequelize-auto 与 mysql2

npm install -g egg-sequelize-auto

npm install -g mysql2

进入项目文件夹

cd egg-demonstrate

用如下的命令生成需要的表结构

egg-sequelize-auto -o "./model" -d databaseName -h localhost -u username -p port -x password -t tableName

参数说明

-h, --host 数据库的IP地址 [required]

-d, --database 数据库名 [required]

-u, --user 用户名

-x, --pass 密码

-p, --port 端口

-c, --config 配置文件[require json file]

-o, --output 目标文件夹

-t, --tables 数据表表名

-e, --dialect The dialect/engine that you're using: postgres, mysql, sqlite

example

假设我有如下的开发环境

项目文件夹为 egg-demonstrate

数据库地址为 192.168.0.205

数据库名称为 digapisids

数据表名称为 userlogs

用户名 root

密码 123456

如生成用户日志表(userlogs)模型

egg-sequelize-auto -o "./model" -h 192.168.0.205 -d digapisids -u root -x 123456 -p 3306 -t userlogs

执行上面的语句,在 model 文件夹中就可以看到生成了一个文件,是针对用户日志的表(userlogs)的模型 userlogs.js

如果数据库有很多的表,出了userlogs,还有 users,whitelist,blacklist

我想一次性生成所有表模型

egg-sequelize-auto -o "./model" -d digapisids -h 192.168.0.205 -u root -x 123456 -p 3306 -e mysql

在 model 文件夹中就可以看到生成了许多文件

如何使用生成的 model 进行增删改查

如:查询用户表中的所有用户

this.ctx.model.models.user.findAndCountAll({offset,limit,order:[['id','desc']],attributes:['id','username','is_superuser','date_joined']});

其他的案例请查看文档

示例:https://www.npmjs.com/package/egg-sequelize-auto

码云:https://gitee.com/eosgravity/egg-sequelize-auto

作者:晴天同学98202


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Node/2549.html