Sequelize 打印 SQL 的格式
Sequelize 是一个 Node.js ORM(Object-Relational Mapping) 框架,提供了对于 MySQL、PostgreSQL、SQLite 和 MSSQL 数据库的支持。通过 Sequelize,我们可以方便地操作数据库,而不需要写复杂的 SQL 语句。在实际开发中,我们很难手动调试 SQL 语句的正确性,因此 Sequelize 提供了一种非常方便的方法,可以打印出每次执行的 SQL 语句,这对于开发和调试非常有帮助。
打印 SQL 的格式
默认情况下,Sequelize 不会打印 SQL 语句。要打印 SQL 语句,我们需要在创建 Sequelize 实例的时候传入一个配置对象,设置 logging 属性为 console.log。
const { Sequelize } = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql',
logging: console.log, // 打印 SQL
});常用的打印格式
Sequelize 提供了多种打印 SQL 的格式,下面介绍几种常用的格式。
一条 SQL 语句占一行
在这种格式下,每条 SQL 语句只占一行,比较简单明了。
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql',
logging: (sql) => console.log(sql), // 一条 SQL 语句占一行
});SQL 语句和参数分开打印
在这种格式下,将 SQL 语句和参数分开打印,更加易读。
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql',
logging: (sql, timing) => {
console.log('SQL:', sql);
console.log('Params:', timing.bind);
}, // SQL 语句和参数分开打印
});指导意义
打印 SQL 语句对于调试和优化 Sequelize 语句是很有帮助的,可以追查错误和性能问题。但是我们要注意,在生产环境下,这个功能不应该开启,因为它会把敏感信息打印到控制台上。
示例代码
// www.javascriptcn.com code example
const { DataTypes, Model } = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql',
logging: (sql, timing) => {
console.log('SQL:', sql);
console.log('Params:', timing.bind);
}, // SQL 语句和参数分开打印
});
class User extends Model {}
User.init({
firstName: {
type: DataTypes.STRING,
allowNull: false,
},
lastName: {
type: DataTypes.STRING,
allowNull: false,
},
}, {
sequelize,
modelName: 'user',
});
async function createUser() {
await sequelize.sync({ force: true });
const user = await User.create({
firstName: 'John',
lastName: 'Doe',
});
console.log(user.toJSON());
}
createUser();输出结果:
Executing (default): DROP TABLE IF EXISTS `users`;
Executing (default): CREATE TABLE IF NOT EXISTS `users` (`id` INTEGER NOT NULL auto_increment , `firstName` VARCHAR(255) NOT NULL, `lastName` VARCHAR(255) NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
Executing (default): INSERT INTO `users` (`id`,`firstName`,`lastName`,`createdAt`,`updatedAt`) VALUES (DEFAULT,'John','Doe','2021-07-29 09:15:26','2021-07-29 09:15:26');
{ id: 1, firstName: 'John', lastName: 'Doe', createdAt: 2021-07-29T09:15:26.000Z, updatedAt: 2021-07-29T09:15:26.000Z }我们可以看到,Sequelize 自动创建了 users 表,并插入了一条数据。同时,在命令行中打印出了 SQL 语句和对应的参数。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d63efba941bf7134bf101f