Expand description
The async SQL toolkit for Rust, built with ❤️ by the LaunchBadge team.
See our README to get started or browse our example projects. Have a question? Check our FAQ or open a discussion.
§Runtime Support
SQLx supports both the Tokio and async-std runtimes.
You choose which runtime SQLx uses by default by enabling one of the following features:
runtime-async-std
runtime-tokio
The runtime-actix
feature also exists but is an alias of runtime-tokio
.
If more than one runtime feature is enabled, the Tokio runtime is used if a Tokio context exists on the current
thread, i.e. tokio::runtime::Handle::try_current()
returns Ok
; async-std
is used otherwise.
Note that while SQLx no longer produces a compile error if zero or multiple runtime features are enabled, which is useful for libraries building on top of it, the use of nearly any async function in the API will panic without at least one runtime feature enabled.
The chief exception is the SQLite driver, which is runtime-agnostic, including its integration with the query macros.
However, SqlitePool
does require runtime support for timeouts and spawning
internal management tasks.
§TLS Support
For securely communicating with SQL servers over an untrusted network connection such as the internet, you can enable Transport Layer Security (TLS) by enabling one of the following features:
tls-native-tls
: Enables thenative-tls
backend which uses the OS-native TLS capabilities:- SecureTransport on macOS.
- SChannel on Windows.
- OpenSSL on all other platforms.
tls-rustls
: Enables the rustls backend, a cross-platform TLS library.- Only supports TLS revisions 1.2 and 1.3.
- If you get
HandshakeFailure
errors when using this feature, it likely means your database server does not support these newer revisions. This might be resolved by enabling or switching to thetls-native-tls
feature. - rustls supports several providers of cryptographic primitives. The default
(enabled when you use the
tls-rustls
feature ortls-rustls-ring
) is thering
provider, which has fewer build-time dependencies but also has fewer features. Alternatively, you can usetls-rustls-aws-lc-rs
to use theaws-lc-rs
provider, which enables additional cipher suite support at the cost of more onerous build requirements (depending on platform support).
If more than one TLS feature is enabled, the tls-native-tls
feature takes precedent so that it is only necessary to enable
it to see if it resolves the HandshakeFailure
error without disabling tls-rustls
.
Consult the user manual for your database to find the TLS versions it supports.
If your connection configuration requires a TLS upgrade but TLS support was not enabled, the connection attempt will return an error.
The legacy runtime+TLS combination feature flags are still supported, but for forward-compatibility, use of the separate runtime and TLS feature flags is recommended.
Modules§
- SEE DOCUMENTATION BEFORE USE. Runtime-generic database driver.
- Traits to represent a database driver.
- Provides
Decode
for decoding values from the database. - Provides
Encode
for encoding values for the database. - Types for working with errors produced by SQLx.
- mysql
mysql
MySQL database driver. - Provides the connection pool for asynchronous SQLx connections.
- postgres
postgres
PostgreSQL database driver. - Convenience re-export of common traits.
- Types and traits for the
query
family of functions and macros. - Runtime query-builder API.
- sqlite
sqlite
SQLite database driver. - Conversions between Rust and SQL types.
Macros§
- Embeds migrations into the binary by expanding to a static instance of Migrator.
- query
macros
Statically checked SQL query withprintln!()
style syntax. - query_
as macros
A variant ofquery!
which takes a path to an explicitly defined struct as the output type. - query_
as_ unchecked macros
A variant ofquery_as!
which does not check the input or output types. This still does parse the query to ensure it’s syntactically and semantically valid for the current database. - query_
file macros
A variant ofquery!
where the SQL query is stored in a separate file. - query_
file_ as macros
Combines the syntaxes ofquery_as!
andquery_file!
. - query_
file_ as_ unchecked macros
A variant ofquery_file_as!
which does not check the input or output types. This still does parse the query to ensure it’s syntactically and semantically valid for the current database. - query_
file_ scalar macros
A variant ofquery_scalar!
which takes a file path likequery_file!
. - A variant of
query_file_scalar!
which does not typecheck bind parameters and leaves the output type to inference. The query itself is still checked that it is syntactically and semantically valid for the database, that it only produces one column and that the number of bind parameters is correct. - query_
file_ unchecked macros
A variant ofquery_file!
which does not check the input or output types. This still does parse the query to ensure it’s syntactically and semantically valid for the current database. - query_
scalar macros
A variant ofquery!
which expects a single column from the query and evaluates to an instance of QueryScalar. - query_
scalar_ unchecked macros
A variant ofquery_scalar!
which does not typecheck bind parameters and leaves the output type to inference. The query itself is still checked that it is syntactically and semantically valid for the database, that it only produces one column and that the number of bind parameters is correct. - query_
unchecked macros
A variant ofquery!
which does not check the input or output types. This still does parse the query to ensure it’s syntactically and semantically valid for the current database.
Structs§
- Any
any
Opaque database driver. Capable of being used in place of any SQLx database driver. The actual driver used will be selected at runtime, from the connection url. - SEE DOCUMENTATION BEFORE USE. Runtime-generic database connection.
- MySql
mysql
MySQL database driver. - MySql
Connection mysql
A connection to a MySQL database. - PgConnection
postgres
A connection to a PostgreSQL database. - An asynchronous pool of SQLx database connections.
- Postgres
postgres
PostgreSQL database driver. - A builder type for constructing queries at runtime.
- One or more raw SQL statements, separated by semicolons (
;
). - Sqlite
sqlite
Sqlite database driver. - Sqlite
Connection sqlite
A connection to an open Sqlite database. - An in-progress database transaction or savepoint.
Enums§
- The enum
Either
with variantsLeft
andRight
is a general purpose sum type with two cases. - Represents all the ways a method can fail within SQLx.
Traits§
- Acquire connections or transactions from a database in a generic way.
- AnyExecutor
any
An alias forExecutor<'_, Database = Any>
. - A tuple of arguments to be sent to the database.
- Represents a single database connection.
- A database driver.
- A type that can be decoded from the database.
- Encode a single value to be sent to the database.
- A type that may be executed against a database connection.
- A type that contains or can provide a database connection to use for executing queries against the database.
- A record that can be built from a row returned by the database.
- MySql
Executor mysql
An alias forExecutor<'_, Database = MySql>
. - PgExecutor
postgres
An alias forExecutor<'_, Database = Postgres>
. - Represents a single row from the database.
- Sqlite
Executor sqlite
An alias forExecutor<'_, Database = Sqlite>
. - An explicitly prepared statement.
- Indicates that a SQL type is supported for a database.
- Provides information about a SQL type for the database driver.
- An owned value from the database.
- A reference to a single value from the database.
Functions§
- Execute a single SQL query as a prepared statement (transparently cached).
- Execute a single SQL query as a prepared statement (transparently cached). Maps rows to Rust types using
FromRow
. - Execute a single SQL query, with the given arguments as a prepared statement (transparently cached). Maps rows to Rust types using
FromRow
. - Execute a single SQL query as a prepared statement (transparently cached) and extract the first column of each row.
- Execute a SQL query as a prepared statement (transparently cached), with the given arguments, and extract the first column of each row.
- Execute a SQL query as a prepared statement (transparently cached), with the given arguments.
- Execute one or more statements as raw SQL, separated by semicolons (
;
).
Type Aliases§
- SEE DOCUMENTATION BEFORE USE. Type alias for
Pool<Any>
. - MySql
Pool mysql
An alias forPool
, specialized for MySQL. - PgPool
postgres
An alias forPool
, specialized for Postgres. - A specialized
Result
type for SQLx. - Sqlite
Pool sqlite
An alias forPool
, specialized for SQLite.
Attribute Macros§
- Mark an
async fn
as a test with SQLx support.