#sqlx #rqlite #driver #sql #details #direct

sqlx-rqlite

SQLx 的 rqlite 驱动实现。不建议直接使用;有关详细信息,请参阅 sqlx crate。

4 个版本

0.1.3 2024年3月13日
0.1.2 2024年3月13日
0.1.1 2024年3月13日
0.1.0 2024年3月13日

#1638数据库接口

Apache-2.0

61KB
1.5K SLoC

SQLx rqlite

Rust SQL 工具包的 rqlite 驱动

Sqlx rqlite 驱动

安装

您需要在您的系统上安装 rqlite。

使用方法

一个简单的 Cargo 依赖关系看起来像这样

[dependencies]
sqlx-rqlite = { version = "0.1" }
sqlx = {  version = "0.7" , default-features = false, features = ["macros", "runtime-tokio", "tls-none"] }
tokio = { version = "1", features = [ "full" ] }

假设一个 rqlite 节点监听在 "127.0.0.1:4001",一个简单的应用程序将按以下方式进行

use futures_util::StreamExt;
use sqlx::prelude::*;
use sqlx_rqlite::RqlitePoolOptions;

//#[async_std::main] // Requires the `attributes` feature of `async-std`
#[tokio::main]
// or #[actix_web::main]
async fn main() -> Result<(), sqlx::Error> {
  let pool = RqlitePoolOptions::new()
        //.max_connections(5)
        .connect("rqlite://localhost:4001")
        .await?;
  sqlx::query(
        "CREATE TABLE IF NOT EXISTS _sqlx_rqlite_test_user_ (
        id INTEGER PRIMARY KEY,
        name TEXT NOT NULL UNIQUE
    )",
    )
    .execute(&pool)
    .await?;
    
  
    
  let mut row = sqlx::query("SELECT * FROM _sqlx_rqlite_test_user_  WHERE name = ?")
        .bind("JohnDoe")
        .fetch_optional(&pool)
        .await?;

    if row.is_none() {
        sqlx::query("INSERT INTO _sqlx_rqlite_test_user_  (name) VALUES (?);")
            .bind("JohnDoe")
            .execute(&pool)
            .await?;
        row = sqlx::query("SELECT * FROM _sqlx_rqlite_test_user_  WHERE name = 'JohnDoe'")
            .fetch_optional(&pool)
            .await?;
    }
    assert!(row.is_some());
    sqlx::query(
        "DROP TABLE _sqlx_rqlite_test_user_",
    )
    .execute(&pool)
    .await?;
    Ok(())
}

要获得 "datetime" 支持,您需要启用 "chrono" 功能。


安全

对于安全的连接,使用

let pool = RqlitePoolOptions::new()
        //.max_connections(5)
        .connect("rqlite://localhost:4001&ssl=yes")
        .await?;

⚠️ 危险 如果您选择不安全的 ssl 连接(接受无效证书),请使用

let pool = RqlitePoolOptions::new()
        //.max_connections(5)
        .connect("rqlite://localhost:4001&ssl-insecure=yes")
        .await?;

许可证

许可协议

贡献

除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,根据 Apache-2.0 许可证定义,应按上述方式许可,不附加任何额外的条款或条件。

依赖项

~19–30MB
~555K SLoC