Sequelize Js - 如果数据库不存在,则创建一个新的数据库

4

我在项目中使用 SequelizeJs + NodeJs + Mysql。
每次启动项目时,我想要检查数据库是否存在,如果不存在,我想要创建一个新的数据库。
我尝试了以下代码:

const mysql        = require('mysql2');

let mysqlCon = mysql.createConnection({
    host    :config.host,
    user    :config.username,
    password:config.password
});

mysqlCon.connect(function(err) {

    //Check Database
    mysqlCon.query('SHOW DATABASES LIKE ' + config.database,
        function(err, result) {
            if(err) {

                //Create new Database
                mysqlCon.query(
                    'CREATE DATABASE ' + config.database,
                    function(err, result) {
                        if(!err){

                            //Sync sequelize js model files
                            models.sequelize.sync().then(() => {
                                console.log('Database connected successfully!');
                            }).catch((err) => {
                                console.log(err, 'Something went wrong with the Database!');
                            });

                        }
                    });
            }
        });
    if(err) {
        console.log(err.message);

    } else {
        console.log('Connected!');
    }
});

我遇到了这个错误:

sqlMessage: 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'pixljobs\' at line 1' } undefined

请看这个链接:https://dev59.com/lZ3ha4cB1Zd3GeqPV4mL - Mohamed Sameer
3个回答

4
使用以下命令创建数据库:"CREATE DATABASE IF NOT EXISTS DBName;"

3

也许,一个不同的方法是使用Sequelize迁移。

在这里查看文档:https://sequelize.org/master/manual/migrations.html

安装sequelize-cli后,您需要初始化项目,添加迁移以初始化DB模式(表、索引等),然后运行命令db:create,之后运行db:migrate

迁移文件由两部分组成: "up"函数是您应用于DB的内容,而 "down"函数是需要回滚的内容。 它看起来像这样:

module.exports = {
  up: (queryInterface, Sequelize) => {
    // logic for transforming into the new state
  },
  down: (queryInterface, Sequelize) => {
    // logic for reverting the changes
  }
}

这种方法的优点在于您可以以自动化、可扩展的方式初始化不同的环境。

最后,为了回答您的问题,您只需要确保在每个要运行项目的环境中运行sequelize-cli db:createsequelize-cli db:migrate,以确保数据库具有正确的模式。如果您使用的是 sequelize-cli > v5.2.0,则db:create将在不存在数据库时创建数据库,并在已经创建数据库的情况下使用现有数据库(在幕后它运行 Kumaresan 向您展示的命令)。

希望这可以帮助您!


0

在2021年,Sequelize还没有为mariadb实现db:create。如果你遇到了同样的问题,我找到的解决方法是osifo在这里提供的答案:https://dev59.com/lZ3ha4cB1Zd3GeqPV4mL#46694727

在我的情况下,我只是创建了另一个名为create-database.js的文件,并使用node create-database.js运行此文件,然后再像这样运行迁移:create-node database.js && npx sequelize-cli db:migrate,但我认为更好的解决方案是将此代码放在第一个迁移文件中,在实际迁移代码之前运行迁移。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接