nodejs使用sequelize-auto自动生成数据库关系模型文件

冀鸿才
2023-12-01

上篇说到我虽然使用了sequelize,但是感觉我一个后台没写完,人就累死了。

所以我就找了下有没有可以自动生成模型文件的,听说他们JAVA就有的。

然后就找到了这个 sequelize-auto。

1,安装

npm install -g sequelize-auto mysql

2,生成model文件

sequelize-auto -o "./mysqltest" -d ips -h localhost -u root -p 3306 -x 123456 -t t_user -e mysql -c "./mysql-age.json" -C

 如果数据库密码是空的,就删除-x 123456

3,示例

[node] sequelize-auto -h <host> -d <database> -u <user> -x [password] -p [port]  --dialect [dialect] -c [/path/to/config] -o [/path/to/models] -t [tableName] -C

4,配置

Options:
  -h, --host        [required] * 数据库地址
  -d, --database    [required] * 数据库名称
  -u, --user        # 数据库用户名
  -x, --pass        # 数据库密码
  -p, --port        # 数据库端口号
  -c, --config      # Sequelize的构造函数“options”标记对象的JSON文件路径
  -o, --output      # 输出文件路径
  -e, --dialect     # 数据库类型:postgres, mysql, sqlite
  -a, --additional  # 包含在model的配置参数中define的模型定义的JSON文件路径
  -t, --tables      # 要导出的表名,多个表名逗号分隔,空值就导出所有表模型
  -T, --skip-tables # 要跳过的表名,多个表名逗号分隔
  -C, --camel       # 使用驼峰命名模型和字段
  -n, --no-write    # 是否写入文件
  -s, --schema      # 从中检索表的数据库架构(翻译不动,也没明白作用,原文:Database schema from which to retrieve tables)  
  -z, --typescript  # 将模型输出为typescript文件

5,因为我觉得每次输命令太麻烦了,就自己对命令进行了一点点封装了一个JS文件,用NODE去执行文件。

5.1,添加文件sequelize.model.js

'use strict';
// sequelize.model.js
const child_process = require('child_process');
const { exec } = child_process;
const modelName = process.argv[2];
const database = {
  // [required] * 数据库地址
  host: 'localhost',
  // [required] * 数据库名称
  database: 'ips',
  // 数据库用户名
  user: 'root',
  // 数据库密码
  pass: '',
  // 数据库端口号
  port: 3306,
  // Sequelize的构造函数“options”标记对象的JSON文件路径
  config: '',
  // 输出文件路径
  output: './dbModel',
  // 数据库类型:postgres, mysql, sqlite
  dialect: 'mysql',
  // 包含在model的配置参数中define的模型定义的JSON文件路径
  additional: '',
  // 表名,多个表名逗号分隔
  tables: modelName || '',
  // 要跳过的表名,多个表名逗号分隔
  'skip-tables': '',
  // 使用驼峰命名模型和字段
  camel: true,
  // 是否写入文件
  'no-write': false,
  // 从中检索表的数据库架构
  schema: false,
  // 将模型输出为typescript文件
  typescript: false,
};

let connectShell = 'sequelize-auto';
for (const i in database) {
  const value = database[i];
  if (value) {
    if (value === true) {
      connectShell += ` --${i}`;
    } else {
      connectShell += ` --${i} ${value}`;
    }
  }
}
exec(connectShell, (err, stdout, stderr) => {
  console.log(`stderr: ${stderr}`);
  console.log(`stdout: ${stdout}`);
  if (err) {
    console.log(`exec error: ${err}`);
  }
});

5.2,然后在package.json中scripts中添加脚本"model": "node sequelize.model.js"

// package.json
{
    "scripts": {
        "model": "node sequelize.model.js"
    }
}

5.3,在需要生产model文件时,运行脚本

# 把所有表model文件
npm run model
# 把单个对应表名model文件
npm run model user

结尾: 有兴趣可以去看下我的项目

https://github.com/babyxiaojine/eggjs-admin

 类似资料: