sequelize for Node.js : ER_NO_SUCH_TABLE

When you define a model to an existing table, you need to set two options for sequelize to:

  1. find your table name as-is and
  2. not fret about sequelize's default columns updatedAt and createdAt that it expects.

Simply add both options like so:

var nodeTest = sequelize.define('node_test',
        { uid: Sequelize.INTEGER , val: Sequelize.STRING},
        { freezeTableName: true , timestamps: false} //add both options here
);

Note the options parameter:

    sequelize.define('name_of_your_table',
    {attributes_of_your_table_columns},
    {options}
     );

Missing either options triggers respective errors when using sequelize methods such as nodeTest.findAll().

> ER_NO_SUCH_TABLE    //freezeTableName
> ER_BAD_FIELD_ERROR  //timestamps

Alternatively, you can:

  1. create a fresh table through sequelize. It will append "s" to the table name and create two timestamp columns as defaults or
  2. use sequelize-auto, an awesome npm package to generate sequelize models from your existing database programmatically.

Here's the sequelize documentation for option configurations.


I found the answer my own question.

I appended Sequelize method option following. {define:{freezeTableName:true}}

Then sequelize not appends 's' character after table name.


Though the answer works nicely, I nowadays recommend the use of the tableName option when declaring the model:

sequelize.define('node_test', { 
  uid: Sequelize.INTEGER,
  val: Sequelize.STRING
}, {
   tableName: 'node_test'
});

http://docs.sequelizejs.com/manual/tutorial/models-definition.html


Sequelize is using by default the plural of the passed model name. So it will look for the table "node_tests" or "NodeTests". Also it can create the table for you if you want that.

nodeTest.sync().success(function() {
  // here comes your find command.
})

Sync will try to create the table if it does not already exist. You can also drop the existing table and create a new one from scratch by using sync({ force: true }). Check the SQL commands on your command line for more details about what is going on.