Sequelize Js - создать новую базу данных, если ее не существует

Я использую ( 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

3 ответа

Используйте следующую команду, чтобы создать "CREATE DATABASE, ЕСЛИ НЕ СУЩЕСТВУЕТ DBName;"

Возможно, другим подходом было бы использование миграций Sequelize.

Ознакомьтесь с документами здесь: https://sequelize.org/master/manual/migrations.html

После установки sequelize-cli вы запускаете проект, добавляете миграции для инициализации схемы БД (таблицы, индексы и т. Д.), А затем запускаете команду db:create, а после него запустить db:migrate.

Файл миграции состоит из двух частей: функция "вверх" - это то, что вы применяете к БД, и функция "вниз", что вам нужно для отката. Это выглядит примерно так:

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

Преимущество этого подхода заключается в том, что у вас есть способ инициализировать различные среды автоматизированным масштабируемым способом.

Наконец, чтобы ответить на ваш вопрос, вам просто нужно убедиться, что вы запустили sequelize-cli db:create а также sequelize-cli db:migrateв каждой среде, в которой вы хотите запустить свой проект, чтобы убедиться, что БД имеет правильную схему. Если вы используете sequelize-cli > v5.2.0,db:create создаст БД, если она не существует, и будет использовать существующую БД, если она уже была создана (за кулисами он запускает команду, которую показал вам Кумаресан).

Надеюсь это поможет!

В 2021 году Sequelize не реализовал db: create для mariadb, если вы столкнулись с той же проблемой, я нашел обходной путь - это ответ osifo здесь: /questions/23725716/kak-sozdat-bazu-dannyih-mysql-s-pomoschyu-sequelize-nodejs/23725727#23725727.

В моем случае я просто создал еще один файл с именем create-database.js и запускаю этот файл с помощью node create-database.js перед запуском таких миграций, как: create-node database.js && npx sequelize-cli db:migrate но я думаю, что лучшим решением будет поместить этот код в первый файл миграции перед фактическим кодом миграции и просто запустить миграции в обычном режиме.

Другие вопросы по тегам