54 releases (17 stable)
|1.4.5||Jun 9, 2020|
|1.4.4||Mar 23, 2020|
|1.4.3||Oct 11, 2019|
|1.4.2||Mar 19, 2019|
|0.2.0||Nov 30, 2015|
#1 in #blockchain
67,871 downloads per month
Used in 175 crates (153 directly)
Diesel is the most productive way to interact with databases in Rust because of its safe and composable abstractions over queries.
Diesel is an ORM and query builder designed to reduce the boilerplate for database interactions. If this is your first time reading this documentation, we recommend you start with the getting started guide. We also have many other long form guides.
For Diesel to validate your queries at compile time it requires you to specify your schema in your code, which you can do with the
diesel print-schema or
infer_schema! can be used to automatically generate these macro calls (by connecting to your database and querying its schema).
Diesel provides a
prelude module, which exports most of the typically used traits and types. We are conservative about what goes in this module, and avoid anything which has a generic name. Files which use Diesel are expected to have
The tools the query builder gives you can be put into these three categories:
- "Query builder methods" are things that map to portions of a whole query (such as
WHERE). These methods usually have the same name as the SQL they map to, except for
WHEREwhich is called
filterin Diesel (To not conflict with the Rust keyword). These methods live in the
- "Expression methods" are things you would call on columns or other individual values. These methods live in the
expression_methodsmodule You can often find these by thinking "what would this be called" if it were a method and typing that into the search bar (e.g.
likein Diesel). Most operators are named based on the Rust function which maps to that operator in
- "Bare functions" are normal SQL functions such as
sum. They live in the
dslmodule. Diesel only supports a very small number of these functions. You can declare additional functions you want to use with the
Types which represent the result of a SQL query implement a trait called
Diesel maps "Rust types" (e.g.
i32) to and from "SQL types" (e.g.
diesel::sql_types::Integer). You can find all the types supported by Diesel in the
sql_types module. These types are only used to represent a SQL type. You should never put them on your
To find all the Rust types which can be used with a given SQL type, see the documentation for that SQL type.
If you run into problems, Diesel has a very active Gitter room. You can come ask for help at gitter.im/diesel-rs/diesel Includes various helper types and bare functions which are named too generically to be included in prelude, but are often used when using Diesel. Provide helper types for concisely writing the return type of functions. As with iterators, it is unfortunately difficult to return a partially constructed query without exposing the exact implementation of the function. Without higher kinded types, these various DSLs can't be combined into a single trait for boxing purposes.
All types here are in the form
<FirstType as DslName<OtherTypes>>::Output. So the return type of
users.filter(first_name.eq("John")).order(last_name.asc()).limit(10) would be
Limit<Order<FindBy<users, first_name, &str>, Asc<last_name>>> Re-exports important traits and types. Meant to be glob imported when using Diesel.