我想开始使用Sequelize,这是一个允许在node.js中使用ORM的模块。我想知道是否可能像CakePHP一样自动生成模型。在CakePHP中,它会读取表的信息,并自动在模型中创建关联和字段及其类型。我真的不想完全手动映射所有的表,因为有些相对较大。是否有类似的工具可以帮助我完成这个过程?或者我只能自己手动键入所有的模型了?
我想开始使用Sequelize,这是一个允许在node.js中使用ORM的模块。我想知道是否可能像CakePHP一样自动生成模型。在CakePHP中,它会读取表的信息,并自动在模型中创建关联和字段及其类型。我真的不想完全手动映射所有的表,因为有些相对较大。是否有类似的工具可以帮助我完成这个过程?或者我只能自己手动键入所有的模型了?
sequelize-auto
已经很久没有维护了,而且这个包已经过时了。$ npm install sequelize-automate
$ ./node_modules/.bin/sequelize-automate --help
例如:
$ ./node_modules/.bin/sequelize-automate -t js -h localhost -d test -u root -p root -o models
Sequelizer - 一款桌面应用程序,可以自动化地以图形方式导出sequelize模型。
这是使用ElectronJS制作的一个相当不错的GUI客户端,可以在此处获取: 源代码:https://github.com/andyforever/sequelizer
Object.keys(db).forEach((modelName) => {
db[modelName].sync().then(result => {
// some logic
}).catch(err => {
// some logic
})
});
index.js
。'use strict';
const fs = require("fs");
const path = require("path");
const Sequelize = require("sequelize");
const sequelize = new Sequelize(process.env.DB_DATEBASE, process.env.DB_USER, process.env.DB_PASS, {
host: process.env.DB_HOST,
port: process.env.DB_PORT,
dialect: 'mysql',
operatorsAliases: false
});
const db = {};
fs
.readdirSync(__dirname)
.filter((file) => {
return (file.indexOf(".") !== 0) && (file !== "index.js") && (file !== "migrations") && (file !== "redshift-migrations");
})
.forEach((file) => {
const model = sequelize.import(path.join(__dirname, file));
db[model.name] = model;
});
Object.keys(db).forEach((modelName) => {
if ("associate" in db[modelName]) {
db[modelName].associate(db);
}
db[modelName].sync().then(result => {
// some logic
}).catch(err => {
// some logic
})
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
使用npm install --save-dev sequelize-cli
使用npm install --save-dev sequelize-auto
使用npx sequelize-auto -o "./database/models" -d -h localhost -u root -p 3306 -x '' -e mysql命令
查看https://github.com/sequelize/sequelize/issues/339
Sequelize提供了读取数据库中现有表名的方法。此外,还有一种方法可以读取表的结构。结合起来,应该可以自动创建模型。
npm install --save sequelize-auto
npm install --save mysql2
const SequelizeAuto = require('sequelize-auto');
const path = require('path');
const options = {
dialect: 'mysql', // Replace with your database dialect (e.g., mysql, postgres, etc.)
host: 'localhost',
port: '3306', // Replace with your database port
database: 'your_database_name', // Replace with your database name
username: 'your_username', // Replace with your database username
password: 'your_password', // Replace with your database password
directory: path.resolve(__dirname, './models'), // Replace with the desired output directory for models
additional: {
timestamps: false, // Additional options for model generation (e.g., timestamps, underscored, etc.)
underscored: true
}
};
const auto = new SequelizeAuto(null, null, null, options);
auto.run(function (err) {
if (err) throw err;
console.log(auto.tables); // List of generated tables
});
node generate-models.js