-
-
Save kuc-arc-f/36f1b6e83103d6806816740d812bda93 to your computer and use it in GitHub Desktop.
Rust, Turso SDK example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| TURSO_DATABASE_URL="" | |
| TURSO_AUTH_TOKEN= |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| [package] | |
| name = "turso_cli_1" | |
| version = "0.1.0" | |
| edition = "2024" | |
| [dependencies] | |
| anyhow = "1.0.100" | |
| dotenvy = "0.15" | |
| libsql = "0.9.23" | |
| tokio = { version = "1.0", features = ["full"] } | |
| tracing = "0.1" | |
| tracing-subscriber = { version = "0.3", features = ["env-filter"] } | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //use env_logger; | |
| use anyhow::{ensure, Context, Result}; | |
| use std::env; | |
| use libsql::Builder; | |
| use libsql::Connection; | |
| use libsql::params; | |
| use dotenvy::dotenv; | |
| // #[tokio::main] | |
| #[tokio::main(flavor = "current_thread")] | |
| async fn main() -> anyhow::Result<()>{ | |
| dotenv().ok(); | |
| // 環境変数から URL, Token を取得 | |
| let url = env::var("TURSO_DATABASE_URL") | |
| .expect("TURSO_DATABASE_URL must be set"); | |
| println!("TURSO_DATABASE_URL={}", url); | |
| let token = env::var("TURSO_AUTH_TOKEN") | |
| .expect("TURSO_AUTH_TOKEN must be set"); | |
| //println!("token={}", token); | |
| // DB 接続作成(リモート、もしくはエンベデッドレプリカ) | |
| let db = Builder::new_remote(url, token) | |
| .build() | |
| .await?; | |
| let conn = db.connect()?; | |
| // テーブルがなければ作る | |
| conn.execute( | |
| "CREATE TABLE IF NOT EXISTS test ( | |
| id INTEGER PRIMARY KEY AUTOINCREMENT, | |
| name TEXT NOT NULL, | |
| age INTEGER, | |
| created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, | |
| updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP | |
| )", | |
| (), | |
| ).await?; | |
| // データ登録(INSERT) | |
| conn.execute( | |
| "INSERT INTO test (name, age) VALUES (?1, ?2)", | |
| params!["john-5", 22], | |
| ).await?; | |
| //UPDATE | |
| conn.execute( | |
| "UPDATE test set name= ?1 WHERE ID = ?2", | |
| params!["john-up-22", 6], | |
| ).await?; | |
| //DELETE | |
| conn.execute( | |
| "DELETE FROM test WHERE id = ?1", | |
| params![4], | |
| ).await?; | |
| // 一覧取得(SELECT) | |
| let mut rows = conn.query( | |
| "SELECT id, name, age FROM test", | |
| (), // 引数なし | |
| ).await?; | |
| println!("Users:"); | |
| while let Some(row) = rows.next().await? { | |
| let id: i64 = row.get(0)?; | |
| let name: String = row.get(1)?; | |
| let age: i64 = row.get(2)?; | |
| println!("{}: {} <{}>", id, name, age); | |
| } | |
| Ok(()) | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment