Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/j03-dev/rusql-alchemy
Django ORM Like for Rust
https://github.com/j03-dev/rusql-alchemy
django-orm easy-to-use orm rust turso
Last synced: 19 days ago
JSON representation
Django ORM Like for Rust
- Host: GitHub
- URL: https://github.com/j03-dev/rusql-alchemy
- Owner: j03-dev
- Created: 2024-05-31T11:34:13.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2024-12-26T21:15:16.000Z (about 2 months ago)
- Last Synced: 2024-12-26T22:18:07.632Z (about 2 months ago)
- Topics: django-orm, easy-to-use, orm, rust, turso
- Language: Rust
- Homepage:
- Size: 126 KB
- Stars: 3
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Rusql Alchemy
## Rusql Alchemy is Django ORM like library for Rust
### Why ?
Just for fun! XD
## Sqlite
### Setup `.env` file
```bash
DATABASE_URL=sqlite://
```
### Setup `Cargo.toml`
```toml
[dependencies.rusql-alchemy]
git = "https://github.com/j03-dev/rusql-alchemy"
branch= "main"
features = ["sqlite"] # the default features is sqlite
```
### Model
```rust
use rusql_alchemy::prelude::*;#[derive(Debug, Model, FromRow)]
struct User {
#[model(primary_key=true, auto=true)]
id: Integer,#[model(unique=true)]
name: String,age: Integer,
#[model(default="user")]
role: String
}
```
## Postgres### Setup `.env` file
``` bash
DATABASE_URL=postgres://:@/
```### Setup `Cargo.toml`
```toml
[dependencies.rusql-alchemy]
git = "https://github.com/j03-dev/rusql-alchemy"
branch="main"
default-features = false
features = ["postgres"]
```
### Model: In postgres primary key should be `Serial` type
```rust
use rusql_alchemy::prelude::*;#[derive(Model, FromRow, Debug, Default)]
struct User_ {
#[model(primary_key=true)]
id: Serial,#[model(unique=true)]
name: String,email: Option,
age: Integer,
#[model(default="user")]
role: String,weight: Float,
}
```## Migrate
```rust
use anyhow::Result;
use rusql_alchemy::prelude::*;#[tokio::main]
async fn main() -> Result<()> {
let conn = Database::new().await?.conn;
migrate([Use], &conn);
}
```
## Query### Insert
```rust
use anyhow::Result;
use rusql_alchemy::prelude::*;#[tokio::main]
async fn main() -> Result<()> {
let conn = Database::new().await?.conn;User_ {
name: "johnDoe".to_string(),
password: "p455w0rd".to_string(),
age: 18,
weight: 60.0,
..Default::default()
}
.save(&conn)
.await;let users = User_::all(&conn).await;
println!("{:#?}", users);User_::create(
kwargs!(
name = "joe",
email = "[email protected]",
password = "strongpassword",
age = 19,
weight = 80.1
),
&conn,
)
.await;
}
```
### Select
```rust
use rusql_alchemy::prelude::*;#[tokio::main]
async fn main() {
let conn = config::db::Database::new().await.conn;let users = User_::all(&conn).await;
println!("{:#?}", users);let user = User_::get(
kwargs!(email == "[email protected]").and(kwargs!(password == "strongpassword")),
&conn,
).await;
println!("{:#?}", user);let users = User_::filter(kwargs!(age <= 18), &conn).await;
println!("{:#?}", users);
}
```
### Update
```rust
use rusql_alchemy::prelude::*;
use anyhow::Result;#[tokio::main]
async fn main() -> Result<()> {
let conn = Database::new().await?.conn;if let Some(mut user) = User_::get(
kwargs!(email == "[email protected]").and(kwargs!(password == "strongpassword")),
&conn,
)
.await
{
user.role = "admin".into();
user.update(&conn).await;
}
}
```
### Delete
```rust
use rusql_alchemy::prelude::*;#[tokio::main]
async fn main() {
let conn = Database::new().await.conn;if let Some(user) = User_::get(kwargs!(role == "admin"), &conn).await {
user.delete(&conn).await; // delete one
}
let users = User_::all(&conn).await;
users.delete(&conn).await; // delete all
}
```