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
но я думаю, что лучшим решением будет поместить этот код в первый файл миграции перед фактическим кодом миграции и просто запустить миграции в обычном режиме.