Crate sqlx

source ·
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 the native-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 crossplatform 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 the tls-native-tls feature.

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.
  • mysqlmysql
    MySQL database driver.
  • Provides the connection pool for asynchronous SQLx connections.
  • postgrespostgres
    PostgreSQL database driver.
  • Convenience re-export of common traits.
  • Types and traits for the query family of functions and macros.
  • Runtime query-builder API.
  • sqlitesqlite
    SQLite database driver.
  • Conversions between Rust and SQL types.

Macros§

  • Embeds migrations into the binary by expanding to a static instance of Migrator.
  • querymacros
    Statically checked SQL query with println!() style syntax.
  • query_asmacros
    A variant of [query!] which takes a path to an explicitly defined struct as the output type.
  • A variant of [query_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.
  • A variant of [query!] where the SQL query is stored in a separate file.
  • Combines the syntaxes of [query_as!] and [query_file!].
  • A variant of [query_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.
  • A variant of query_scalar! which takes a file path like [query_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.
  • A variant of [query_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.
  • A variant of [query!] which expects a single column from the query and evaluates to an instance of QueryScalar.
  • A variant of query_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.
  • A variant of [query!] 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§

  • Anyany
    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.
  • MySqlmysql
    MySQL database driver.
  • A connection to a MySQL database.
  • PgConnectionpostgres
    A connection to a PostgreSQL database.
  • An asynchronous pool of SQLx database connections.
  • Postgrespostgres
    PostgreSQL database driver.
  • A builder type for constructing queries at runtime.
  • One or more raw SQL statements, separated by semicolons (;).
  • Sqlitesqlite
    Sqlite database driver.
  • A connection to an open Sqlite database.
  • An in-progress database transaction or savepoint.

Enums§

  • The enum Either with variants Left and Right is a general purpose sum type with two cases.
  • Represents all the ways a method can fail within SQLx.

Traits§

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>.
  • An alias for Pool, specialized for MySQL.
  • PgPoolpostgres
    An alias for Pool, specialized for Postgres.
  • A specialized Result type for SQLx.
  • An alias for Pool, specialized for SQLite.

Attribute Macros§

  • Mark an async fn as a test with SQLx support.

Derive Macros§