0.2.1 |
|
---|---|
0.2.0 |
|
0.1.2 |
|
0.1.1 |
|
0.1.0 |
|
#5 in #prisma
12KB
84 代码行
Prima客户端Rust
一个舒适且自动生成的数据库客户端,它利用Prisma模式。
安装
- 创建Prisma模式并迁移您的数据库
- 安装
prisma-client-rust
CLIcargo install prisma-client-rust
- 安装
prisma-client-rust
- 如果您已安装
cargo-edit
,运行cargo add prisma-client-rust
- 如果没有,请在
Cargo.toml
中将以下内容作为依赖项添加:prisma-client-rust = "0.2.1'
- 如果您已安装
- 将
prisma-client-rust
添加到您的Prisma模式中作为生成器generator client { provider = "prisma-client-rust" // The folder that files should be generated to, relative to your schema file output = "./db" }
- 在终端中运行
prisma-client-rust generate
以生成rust模块 - 在您的代码中包含生成的模块并连接新的Prisma客户端
// Name of the module will be the folder specified in the generator's 'output' pub mod db; use db::{PrismaClient} // Any async runtime can be used, tokio is just an example #[tokio::main] async fn main() { let client = PrismaClient::new(); await client.engine.connect(); }
查询
以下示例使用此模式
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-rust"
binaryTargets = ["native"]
output = "../src/db"
}
model User {
username String @id
displayName String
posts Post[]
comments Comment[]
}
model Post {
id String @id
content String
comments Comment[] @relation()
User User? @relation(fields: [userUsername], references: [username])
userUsername String?
}
model Comment {
id String @id
postId String
post Post @relation(fields: [postId], references: [id])
User User? @relation(fields: [userUsername], references: [username])
userUsername String?
}
查找
pub mod db::{Post};
#[tokio::main]
async fn main() {
let mut client = PrismaClient::new();
client.engine.connect();
// Find a single record using a unique field
let unique_user = client
.user()
.find_unique(User::username().equals("some user".to_string()))
.exec()
.await;
// Find the first record that matches some parameters
let first_user = client
.user()
.find_first(vec![User::username().contains("user".to_string())])
.exec()
.await;
// Find all records that match some parameters
let many_users = client
.user()
.find_many(vec![
// Querying on relations is also supported
User::posts().some(vec![Post::content().contains("content".to_string())]),
])
.exec()
.await;
}
创建
pub mod db::{PrismaClient, User, Post};
#[tokio::main]
async fn main() {
let mut client = PrismaClient::new();
client.engine.connect();
// Required values are passed in as separate arguments
let user = client
.user()
.create_one(
User::username().set("user0".to_string()),
User::display_name().set("User 0".to_string()),
// Optional arguments can be added in a vector as the last parameter
vec![],
)
.exec()
.await;
let post = client
.post()
.create_one(
Post::id().set("0".to_string()),
Post::content().set("Some post content".to_string()),
// Relations can be linked by specifying a where query
Post::user().link(User::username().equals(user.username.to_string())),
vec![],
)
.exec()
.await;
}
删除
pub mod db::{PrismaClient, User, Post};
#[tokio::main]
async fn main() {
let mut client = PrismaClient::new();
client.engine.connect();
// Delete a single record matching a given condition
// (also works with find_unique)
client
.post()
.find_unique(Post::id().equals("0".to_string()))
.delete()
.exec()
.await;
// Delete many records matching given conditions
// (In this case, deletes every user)
client
.user()
.find_many(vec![])
.delete()
.exec()
.await;
}
依赖
~7–23MB
~329K SLoC