|
Home → WINDEV 25 → Exemplo Crud com PostgreSQL feito com a linguagem Rust |
Exemplo Crud com PostgreSQL feito com a linguagem Rust |
Started by Boller, Apr., 10 2025 1:44 PM - No answer |
| |
| | | |
|
| |
Registered member 4,520 messages |
|
Posted on April, 10 2025 - 1:44 PM |
Vou criar um exemplo de CRUD (Create, Read, Update, Delete) em Rust para uma tabela de clientes usando o framework Diesel para interação com banco de dados PostgreSQL. Este é um exemplo funcional básico: 1 Primeiro, crie um novo projeto Rust: cargo new clientes_crud --bin cd clientes_crud 2 Atualize o Cargo.toml com as dependências necessárias: [package] name = "clientes_crud" version = "0.1.0" edition = "2021"
[dependencies] diesel = { version = "2.1.0", features = ["postgres"] } dotenvy = "0.15" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" 3 Crie um arquivo .env na raiz do projeto: DATABASE_URL=postgres://username:password@localhost/clientes_db 4 Crie o arquivo src/models.rs: use diesel::prelude::*; use serde::{Serialize, Deserialize};
#[derive(Queryable, Insertable, Serialize, Deserialize)] #[diesel(table_name = crate::schema::clientes)] pub struct Cliente { pub id: i32, pub nome: String, pub cpf: String, }
#[derive(Insertable, Deserialize)] #[diesel(table_name = crate::schema::clientes)] pub struct NovoCliente { pub nome: String, pub cpf: String, } 5 Crie o arquivo src/schema.rs: diesel::table! { clientes (id) { id -> Int4, nome -> Varchar, cpf -> Varchar, } } 6 Crie o arquivo src/main.rs com o CRUD completo: use diesel::prelude::*; use diesel::pg::PgConnection; use dotenvy::dotenv; use std::env; use self::models::{Cliente, NovoCliente};
mod models; mod schema;
pub fn establish_connection() -> PgConnection { dotenv().ok(); let database_url = env::var("DATABASE_URL") .expect("DATABASE_URL must be set"); PgConnection::establish(&database_url) .expect(&format!("Error connecting to {}", database_url)) }
// CREATE fn create_cliente(conn: &mut PgConnection, nome: &str, cpf: &str) -> Cliente { use crate::schema::clientes; let novo_cliente = NovoCliente { nome: nome.to_string(), cpf: cpf.to_string(), };
diesel::insert_into(clientes::table) .values(&novo_cliente) .get_result(conn) .expect("Error saving new cliente") }
// READ (todos) fn list_clientes(conn: &mut PgConnection) -> Vec { use crate::schema::clientes::dsl::*; clientes .load::(conn) .expect("Error loading clientes") }
// READ (por id) fn get_cliente(conn: &mut PgConnection, cliente_id: i32) -> Option { use crate::schema::clientes::dsl::*; clientes .filter(id.eq(cliente_id)) .first(conn) .optional() .expect("Error loading cliente") }
// UPDATE fn update_cliente(conn: &mut PgConnection, cliente_id: i32, nome: &str, cpf: &str) -> Cliente { use crate::schema::clientes::dsl::*; diesel::update(clientes.filter(id.eq(cliente_id))) .set((nome.eq(nome), cpf.eq(cpf))) .get_result(conn) .expect("Error updating cliente") }
// DELETE fn delete_cliente(conn: &mut PgConnection, cliente_id: i32) -> usize { use crate::schema::clientes::dsl::*; diesel::delete(clientes.filter(id.eq(cliente_id))) .execute(conn) .expect("Error deleting cliente") }
fn main() { let mut conn = establish_connection(); // Exemplo de uso do CRUD // Create let novo_cliente = create_cliente(&mut conn, "João Silva", "123.456.789-00"); println!("Cliente criado: {} - {}", novo_cliente.nome, novo_cliente.cpf); // Read (todos) let clientes = list_clientes(&mut conn); println!("Lista de clientes:"); for cliente in clientes { println!("ID: {}, Nome: {}, CPF: {}", cliente.id, cliente.nome, cliente.cpf); } // Read (por id) if let Some(cliente) = get_cliente(&mut conn, novo_cliente.id) { println!("Cliente encontrado: {} - {}", cliente.nome, cliente.cpf); } // Update let cliente_atualizado = update_cliente(&mut conn, novo_cliente.id, "João Silva Atualizado", "987.654.321-00"); println!("Cliente atualizado: {} - {}", cliente_atualizado.nome, cliente_atualizado.cpf); // Delete let deleted_rows = delete_cliente(&mut conn, novo_cliente.id); println!("Linhas deletadas: {}", deleted_rows); } 7 Crie a migration para o banco de dados. Primeiro, instale o CLI do Diesel: cargo install diesel_cli --no-default-features --features postgres 8 Configure o Diesel e crie a migration: diesel setup diesel migration generate create_clientes 9 Edite o arquivo de migration gerado em migrations/[timestamp]_create_clientes/up.sql: CREATE TABLE clientes ( id SERIAL PRIMARY KEY, nome VARCHAR NOT NULL, cpf VARCHAR NOT NULL ) 10 E o down.sql: DROP TABLE clientes; 11 Execute a migration: diesel migration run Para executar o projeto: cargo run Este código implementa: • Create: Adiciona novos clientes • Read: Lista todos os clientes ou busca por ID • Update: Atualiza informações de um cliente existente • Delete: Remove um cliente pelo ID Características importantes: • Usa Diesel como ORM para PostgreSQL • Inclui tratamento básico de erros • Usa variáveis de ambiente para configuração do banco • Implementa serialização/deserialização com Serde • Estrutura modular com separação de modelos e schema Para usar com outro banco de dados, você precisaria ajustar as dependências e o schema SQL correspondente. Certifique-se de ter o PostgreSQL instalado e configurado com as credenciais corretas no arquivo .env.
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/ |
| |
| |
| | | |
|
| | | | |
| | |
|