Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sequelize: how to import definitions from an existing database

Am I required to handwrite the model definitions for Sequelize even if I'm working off of an existing database.

If it's not required, then how does one go about using Sequelize with an existing database?

I've already defined the database's schema in Doctrine, so I'd rather not have to write another set of model definitions again.

like image 532
dvc Avatar asked Apr 08 '12 03:04

dvc


People also ask

How do I connect multiple databases in Sequelize?

The easiest and most flexible way to do this is to declare multiple databases in our config. js and then loop over these databases in the file handling our database connections (in my case this is the index. js of my models folder).

How do I import a Sequelized model?

To import Sequelize models, you need to export the model as a module first. The code above creates a new instance of the Sequelize class to connect to your database. The sequelize instance needs to be passed into the user. js model file when you call the require() function.

What is DB Sequelize sync ()?

The Sequelize instance method sync() is used to synchronize your Sequelize model with your database tables. The synchronization happens at the table level. When your table doesn't exist the sync() method will generate and run a CREATE TABLE statement for you.24-Jan-2022.


2 Answers

This project aims to create Sequelize models from existing schema https://github.com/sequelize/sequelize-auto

Sequelize-Auto

A tool to automatically generate models for SequelizeJS via the command line.

Install:

npm install -g sequelize-auto 

Usage:

sequelize-auto -h <host> -d <database> -u <user> -x [password] -p [port]  --dialect [dialect] -c [/path/to/config] -o [/path/to/models] 

Options:

  -h, --host      IP/Hostname for the database.                                      [required]   -d, --database  Database name.                                                     [required]   -u, --user      Username for database.                                             [required]   -x, --pass      Password for database.   -p, --port      Port number for database.   -c, --config    JSON file for sending additional options to the Sequelize object.   -o, --output    What directory to place the models.   -e, --dialect   The dialect/engine that you're using: postgres, mysql, sqlite 

Example

sequelize-auto -o "./models" -d sequelize_auto_test -h localhost -u daniel -p 5432 -x my_password -e postgres 

Produces a file/files such as ./models/Users.js which looks like this:

/* jshint indent: 2 */  module.exports = function(sequelize, DataTypes) {   return sequelize.define('Users', {     username: {       type: DataTypes.STRING,       allowNull: true,       defaultValue: null     },     touchedAt: {       type: DataTypes.DATE,       allowNull: true,       defaultValue: null     },     aNumber: {       type: DataTypes.INTEGER,       allowNull: true,       defaultValue: null     },     id: {       type: DataTypes.INTEGER,       primaryKey: true     },     createdAt: {       type: DataTypes.DATE,       allowNull: false,       defaultValue: null     },     updatedAt: {       type: DataTypes.DATE,       allowNull: false,       defaultValue: null     }   }); }; 

Which makes it easy for you to simply Sequelize.import it.

like image 171
Jack Miner Ewes Avatar answered Sep 28 '22 01:09

Jack Miner Ewes


with Sequelize you have to define the structure of the model inside your code. Doing so, Sequelize assumes a specific database schema unless something is overwritten. So in short: No, sequelize cannot mirror the database.

Hope that helps :)

like image 23
sdepold Avatar answered Sep 28 '22 02:09

sdepold