Reading data
Fetching single objects
Sequelize
const user = await User.findByPk(id)
Prisma
const user = await prisma.user({ id })
Fetching selected scalars of single objects
Sequelize
const user = await User.findByPk(id, attributes: {
["name", "email"]
})
Prisma
const userFragment = await prisma.user({ id }).$fragment(`
fragment NameAndEmail on User { id email }`
`)
Fetching relations
Sequelize
const user = await User.findByPk(id, {
include: [
{
model: Post,
},
],
})
Prisma
const postsByUser = await prisma.user({ id }).posts()
Copy
Filtering for concrete values
Sequelize
const user = User.findAll({
where: {
name: 'Alice',
},
})
Prisma
const user = await prisma.users({
where: {
name: 'Alice',
},
})
Other filter criteria
Sequelize
Sequelize has an extensive set of operators to be found here.
Prisma
Prisma generates many additional filters that are commonly used in modern application development:
<field>_ends_with
&<field>_starts_with
<field>_not_ends_with
&<field>_not_starts_with
<field>_gt
&<field>_gte
<field>_lt
&<field>_lte
<field>_contains
&<field>_not_contains
<field>_in
&<field>_not_in
Relation filters
Sequelize
Sequelize doesn't offer a dedicated API for relation filters. You can get similar functionality by sending a raw SQL query to the database.
Prisma
Prisma lets you filter a list based on a criteria that applies not only to the models of the list being retrieved, but to a relation of that model.
For example, you want to fetch only those users that wrote a post with the title "Hello World". The filter criteria is therefore not referencing the user model, but the post model that's related to the user model:
query {
user(where: {
posts_some: {
title: "Hello World"
}
}) {
id
}
}
Pagination
Sequelize
const posts = await Post.findAll({
offset: 5,
limit: 10,
})
Prisma
const posts = await prisma.posts({
skip: 5,
first: 10,
})
In addition to skip
and first
, the Prisma API also offers:
last
before
&after
for cursor based pagination- Relay-style pagination
Writing data
Creating objects
Sequelize
const user = await User.build({ name: 'Alice', email: 'alice@prisma,io', }) await user.save()
Copy
Prisma
const user = await new User({
name: 'Alice',
email: 'alice@prisma.io',
})
Updating objects
Sequelize
user.name = 'James' user.email = ' alice@prisma.com' await user.save()
Copy
Prisma
const updatedUser = await prisma.updateUser({
where: { id },
data: {
name: 'James',
email: 'james@prisma.io',
},
})
Deleting objects
Sequelize
await user.destroy()
Prisma
const deletedUser = await prisma.deleteUser({ id })
Batch updates
Sequelize
const updatedUsers = await User.update({
{ role: "Admin" },
where: {
email: {
[Op.like]: "%@prisma.io"
}
},
})
Prisma
const updatedUsers = await prisma.updateManyUsers({
data: { role: 'ADMIN' },
where: {
email_ends_with: '@prisma.io',
},
})
Batch deletes
Sequelize
await User.destroy({
where: {
id: {
[Op.in]: [id1, id2, id3],
},
},
})
Prisma
await prisma.deleteManyUsers({
id_in: [id1, id2, id3],
})
Transactions
Sequelize
return sequelize.transaction(async t => { const user = await User.create( { name: 'Alice', email: 'alice@prisma,io', }, { transaction: t, }, ) const post1 = await Post.create( { title: 'Join us for GraphQL Conf in 2019', }, { transaction: t, }, ) const post2 = await Post.create( { title: 'Subscribe to GraphQL Weekly for GraphQL news', }, { transaction: t, }, ) await user.setPosts([post1, post2]) })
Copy
Prisma
const newUser: User = await prisma.createUser({
name: 'Bob',
email: 'bob@prisma.io',
posts: {
create: [
{
title: 'Join us for GraphQL Conf in 2018',
},
{
title: 'Subscribe to GraphQL Weekly for GraphQL news',
},
],
},
})