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
每月下载量 3,485
在 http-sense 中使用
55KB
738 行
postgrest-rs
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许可协议有意提交的任何贡献,包括您的工作,应如下双许可,而无需任何附加条款或条件。
许可证
以下任一许可下提供:
- Apache License,版本 2.0,(LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT许可 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
任选其一。
依赖关系
~3–14MB
~206K SLoC