Joachim
Joachim

Reputation: 311

Can Sequelize be used to connect to a new database?

In designing a simple node.js project, I tried using Sequelize to connect to a mysql server using the following configuration parameters:

{ dbname: users
  username: jimmy
  password: users
  params:
    host: localhost
    port: 3306
    dialect: mysql }

though the 'users' database didn't exist yet.
I got a server error:

InternalServerError: {"name":"SequelizeConnectionError","parent":{"code":"ER_BAD_DB_ERROR","errno":1049,"sqlState":"42000","sqlMessage":"Unknown database 'users'"},"original":{"code":"ER_BAD_DB_ERROR","errno":1049,"sqlState":"42000","sqlMessage":"Unknown database 'users'"}}

But the Sequelize docs: Manual | Sequelize indicate that Sequelize can connect to a new database. Please, how can Sequelize be used to connect to a new(non-existing) database?

Upvotes: 3

Views: 1653

Answers (2)

Joachim
Joachim

Reputation: 311

Found a similar problem on SO, and an answer by osifo:

//create the sequelize instance omitting the database-name arg  
const sequelize = new Sequelize("", "<db_user>", "<db_password>", {
  dialect: "<dialect>"
});

return sequelize.query("CREATE DATABASE `<database_name>`;").then(data 
=> {
  // code to run after successful creation.
});  

So, I was able to implement it in my own code:

var SQUser;
var sequlz;
async function connectDB() {
  sequlz = 
    new Sequelize("", "jimmy", "users", {host: "localhost", port: 3306, dialect: "mysql"});
  await sequlz.query("CREATE DATABASE users;");
  await sequlz.query("Use users;");
  SQUser = sequlz.define('Table', 
    {
      // define table schema
    });
  return SQUser.sync();
};

//use sequelize to populate the table
async function create() {
  const SQUser = await connectDB();
  return SQUser.create(
 //values
  );
}

Upvotes: 1

Nir Alfasi
Nir Alfasi

Reputation: 53565

You should read the documentation again carefully (because the wording is indeed confusing!).

New databases versus existing databases

If you are starting a project from scratch, and your database does not exist yet, Sequelize can be used since the beginning in order to automate the creation of every table in your database.

Also, if you want to use Sequelize to connect to a database that is already filled with tables and data, that works as well! Sequelize has got you covered in both cases.

It will connect only to an existing DB, it can help you by creating the tables if they do not exist yet but the DB has to be there in order for sequelize to connect with it.

Following this question, I wrote this PR to update the documentation to be less confusing. Hope it help!

Upvotes: 2

Related Questions