Home » Mysql » How to make Sequelize use singular table names

How to make Sequelize use singular table names

Posted by: admin November 1, 2017 Leave a comment


I have an model called User but Sequelize looks for the table USERS whenever I am trying to save in the DB. Does anyone know how to set Sequelize to use singular table names? Thanks.


The docs state that you can use the property freezeTableName.

Please take a look at this example:

var Bar = sequelize.define('Bar', { /* bla */ }, {
  // don't add the timestamp attributes (updatedAt, createdAt)
  timestamps: false,

  // don't delete database entries but set the newly added attribute deletedAt
  // to the current date (when deletion was done). paranoid will only work if
  // timestamps are enabled
  paranoid: true,

  // don't use camelcase for automatically added attributes but underscore style
  // so updatedAt will be updated_at
  underscored: true,

  // disable the modification of tablenames; By default, sequelize will automatically
  // transform all passed model names (first parameter of define) into plural.
  // if you don't want that, set the following
  freezeTableName: true,

  // define the table's name
  tableName: 'my_very_custom_table_name'


While the accepted answer is correct, you can do this once for all tables rather than having to do it separately for each one. You simply pass in a similar options object into the Sequelize constructor, like so:

var Sequelize = require('sequelize');

//database wide options
var opts = {
    define: {
        //prevent sequelize from pluralizing table names
        freezeTableName: true

var sequelize = new Sequelize('mysql://root:[email protected]:3306/mydatabase', opts)

Now when you define your entities, you don’t have to specify freezeTableName: true:

var Project = sequelize.define('Project', {
    title: Sequelize.STRING,
    description: Sequelize.TEXT