13个稳定版本

1.6.0 2023年7月25日
1.5.0 2023年1月16日
1.3.2 2022年11月22日
1.3.1 2022年7月29日
0.1.0 2020年5月24日

数据库接口 中排名 #159

Download history 896/week @ 2024-04-23 779/week @ 2024-04-30 789/week @ 2024-05-07 805/week @ 2024-05-14 730/week @ 2024-05-21 911/week @ 2024-05-28 809/week @ 2024-06-04 808/week @ 2024-06-11 815/week @ 2024-06-18 854/week @ 2024-06-25 749/week @ 2024-07-02 699/week @ 2024-07-09 984/week @ 2024-07-16 773/week @ 2024-07-23 778/week @ 2024-07-30 772/week @ 2024-08-06

每月下载量 3,485
http-sense 中使用

Apache-2.0 OR MIT

55KB
738

postgrest-rs

Build Crate API License: Apache-2.0 OR MIT

PostgREST 客户端库 🦀。此库提供PostgREST的ORM接口。

使用方法

将以下内容添加到您的 Cargo.toml

[dependencies]
postgrest = "1.0"

简单示例

use postgrest::Postgrest;

let client = Postgrest::new("https://your.postgrest.endpoint");
let resp = client
    .from("your_table")
    .select("*")
    .execute()
    .await?;
let body = resp
    .text()
    .await?;

带有JWT认证的简单示例

use postgrest::Postgrest;

let client = Postgrest::new("https://your.postgrest.endpoint");
let resp = client
    .from("your_table")
    .auth("VerySensitiveJWTValueAsStringOrStr")
    .select("*")
    .execute()
    .await?;
let body = resp
    .text()
    .await?;

使用自定义头部的简化示例(例如,用于与Supabase进行API网关认证)。

use postgrest::Postgrest;

let client = Postgrest::new("https://your.supabase.endpoint/rest/v1/")
    .insert_header("apikey", "ExampleAPIKeyValue"); // EXAMPLE ONLY!
// Don't actually hard code this value, that's really bad. Use environment
// variables like with the dotenv(https://crates.io/crates/dotenv) crate to inject
let resp = client
    .from("your_table")
    .select("*")
    .execute()
    .await?;
let body = resp
    .text()
    .await?;

安全 示例,使用dotenv crate正确检索敏感值,并使用认证的API网关。

use postgrest::Postgrest;
use dotenv;

dotenv::dotenv().ok(); 

let client = Postgrest::new("https://your.supabase.endpoint/rest/v1/")
    .insert_header(
        "apikey",
        dotenv::var("SUPABASE_PUBLIC_API_KEY").unwrap())
let resp = client
    .from("your_table")
    .select("*")
    .execute()
    .await?;
let body = resp
    .text()
    .await?;

构建查询

以下示例假设您已经初始化了客户端。方法 .from().rpc() 在客户端内部初始化查询构建器。

使用过滤器

let resp = client
    .from("your_table")
    .eq("country", "Germany")
    .gte("id", "20")
    .select("*")
    .execute()
    .await?;

更新表

let resp = client
    .from("your_table")
    .eq("username", "soedirgo")
    .update("{\"organization\": \"supabase\"}")
    .execute()
    .await?;

执行存储过程

let resp = client
    .rpc("add", "{\"a\": 1, \"b\": 2}")
    .execute()
    .await?;

过滤器不足:

let resp = client
    .from("countries")
    .eq("name", "New Zealand")                        // You can filter for equality...
    .gt("id", "20")
    .lt("id", "20")
    .gte("id", "20")
    .lte("id", "20")
    .like("name", "%United%")                         // ...do pattern matching...
    .ilike("name", "%United%")
    .is("name", "null")
    .in_("name", vec!["China", "France"])
    .neq("name", "China")
    .fts("phrase", "The Fat Cats", Some("english"))   // ...do full text search...
    .plfts("phrase", "The Fat Cats", None)
    .phfts("phrase", "The Fat Cats", Some("english"))
    .wfts("phrase", "The Fat Cats", None)
    .cs("countries", "(10,20)")
    .cd("countries", "(10,20)")
    .ov("population_range", "(100,500)")
    .sl("population_range", (100, 500))               // ...and range operations!
    .sr("population_range", (100, 500))               // Find out more about the filters at:
    .nxl("population_range", (100, 500))              // https://postgrest.postgresql.ac.cn/en/stable/api.html#operators
    .nxr("population_range", (100, 500))
    .adj("population_range", (100, 500))
    .select("*")
    .execute()
    .await?;

有关更多信息,请参阅 API文档

贡献

欢迎贡献!您可能希望添加一些功能,或者有些文档不清楚,或者有错误——无论如何,请随意创建一个问题,我们将解决它!

以下是一些无聊的东西。

除非您明确声明,否则您根据Apache-2.0许可协议有意提交的任何贡献,包括您的工作,应如下双许可,而无需任何附加条款或条件。

许可证

以下任一许可下提供:

任选其一。


依赖关系

~3–14MB
~206K SLoC