Skip to main content

Get Started with Sequelize Dart

Welcome to Sequelize Dart! This guide will help you get started with using Sequelize Dart in your Dart projects.

Prerequisites

Sequelize Dart uses a Node.js bridge to communicate with the Sequelize.js runtime. You must have Node.js installed before using this package.

Install Node.js

Download and install Node.js v18 or later from nodejs.org.

Alternatively, use a version manager:

# Install with nvm
nvm install 18
nvm use 18

# Or install with fnm
fnm install 18
fnm use 18

Verify your installation:

node --version
# Should print v18.x.x or later
warning

Sequelize Dart will not work without Node.js. The ORM uses a background Node.js process to run Sequelize.js queries against your database.

Installation

Add Sequelize Dart to your pubspec.yaml:

dependencies:
sequelize_orm: ^0.2.0

dev_dependencies:
sequelize_orm_generator: ^0.2.0
build_runner: ^2.4.0

Then run:

dart pub get

Database Connection

Sequelize Dart supports PostgreSQL, MySQL, MariaDB, SQLite. Here's how to set up a connection:

import 'package:sequelize_orm/sequelize_orm.dart';

void main() async {
// Create Sequelize instance with PostgreSQL connection
final sequelize = Sequelize().createInstance(
connection: SequelizeConnection.postgres(
url: 'postgresql://username:password@localhost:5432/database_name',
),
logging: (sql) => SqlFormatter.printFormatted(sql),
);

// Initialize with your models
await sequelize.initialize(
models: [
// Add your models here
],
);

await sequelize.close();
}

Models & Tables

Models in Sequelize Dart are defined using annotations. Here's a basic example:

import 'package:sequelize_orm/sequelize_orm.dart';

part 'users.model.g.dart';

()
class User {
()
()
DataType id = DataType.INTEGER;

()
DataType username = DataType.STRING;

('is_active')
DataType isActive = DataType.BOOLEAN;

static UserModel get model => UserModel();
}

Generating Model Code

We recommend using our optimized CLI for faster code generation:

dart run sequelize_orm_generator:generate

Alternatively, you can use standard build_runner:

dart run build_runner build --delete-conflicting-outputs

This generates the *.model.g.dart file that contains the model implementation.

Basic Querying

Create a Record

final newUser = await User.model.create({
'username': 'johndoe',
'isActive': true,
});

Find Records

// Find all users
final users = await User.model.findAll();

// Find one user
final user = await User.model.findOne(
where: User.model.id.equals(1),
);

Update a Record

await User.model.update(
data: {'isActive': false},
where: User.model.id.equals(1),
);

Complete Example

Here's a complete example putting it all together:

import 'package:sequelize_orm/sequelize_orm.dart';
import 'package:sequelize_orm_example/db/models/user.model.dart';

const connectionString = 'postgresql://postgres:postgres@localhost:5432/postgres';

Future<void> main() async {
// Create Sequelize instance
final sequelize = Sequelize().createInstance(
connection: SequelizeConnection.postgres(url: connectionString),
logging: (sql) => SqlFormatter.printFormatted(sql),
);

// Initialize with models
await sequelize.initialize(
models: [
User.model,
],
);

// Create a new user
final newUser = await User.model.create({
'username': 'johndoe',
'isActive': true,
});

// Find the user
final user = await User.model.findOne(
where: User.model.id.equals(newUser.id),
);

print('Found user: ${user?.username}');

// Update the user
await User.model.update(
data: {'isActive': false},
where: User.model.id.equals(newUser.id),
);

// Find all users
final allUsers = await User.model.findAll();
print('Total users: ${allUsers.length}');

// Close connection
await sequelize.close();
}

Next Steps