> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Gerenciando Bancos de Dados

> Nesta seção, você aprenderá como gerenciar bancos de dados usando o SDK Python. Crie, recupere, atualize, delete e monitore bancos de dados para suas aplicações.

[Client]: client

Bancos de dados são serviços gerenciados fornecidos pela Square Cloud que permitem armazenar e gerenciar dados para suas aplicações. Os bancos de dados suportados incluem Redis, MongoDB, MySQL e PostgreSQL.

## Criando um banco de dados

`client.create_database` retorna um objeto `Database`.

```python theme={null}
import squarecloud as square

client = square.Client(api_key='API_KEY')

async def example():
    # Criar um banco de dados MongoDB com 1024MB de memória
    database = await client.create_database(
        name='meu_banco_dados',
        memory=1024,  # Memória em MB
        type='mongo',  # "redis", "mongo", "mysql" ou "postgres"
        version='8.0.11'  # Opcional - a versão será inferida se não fornecida
    )
    
    print(database.id)               # Identificador do banco de dados
    print(database.name)             # Nome do banco de dados
    print(database.type)             # Tipo de banco de dados
    print(database.cluster)          # Cluster do banco de dados
    print(database.memory)           # Memória alocada (MB)
    print(database.cpu)              # CPU alocada
    print(database.password)         # Senha do banco de dados
    print(database.connection_url)   # URL de conexão
    print(database.certificate)      # Certificado TLS
```

## Recuperando informações do banco de dados

`client.get_database_info` retorna um objeto `DatabaseInfo`.

```python theme={null}
import squarecloud as square

client = square.Client(api_key='API_KEY')

async def example():
    database_info = await client.get_database_info(database_id='DATABASE_ID')
    
    print(database_info.id)            # Identificador do banco de dados
    print(database_info.name)          # Nome do banco de dados
    print(database_info.type)          # Tipo de banco de dados
    print(database_info.owner)         # ID do usuário proprietário
    print(database_info.cluster)       # Cluster do banco de dados
    print(database_info.ram)           # Uso de RAM em MB
    print(database_info.port)          # Porta do banco de dados
    print(database_info.created_at)    # Data de criação (ISO 8601)
    print(database_info.created_at_datetime)  # Data de criação como objeto datetime
```

## Obtendo o status do banco de dados

`client.get_database_status` retorna um objeto `StatusData`.

```python theme={null}
import squarecloud as square

client = square.Client(api_key='API_KEY')

async def example():
    status = await client.get_database_status(database_id='DATABASE_ID')
    
    print(status.ram)      # Uso de RAM
    print(status.cpu)      # Porcentagem de uso de CPU
    print(status.network)  # Estatísticas de rede
    print(status.running)  # Se o banco de dados está em execução
    print(status.storage)  # Uso de armazenamento
```

## Listando todos os bancos de dados

`client.all_databases_status` retorna uma lista de objetos `ResumedStatus`.

```python theme={null}
import squarecloud as square

client = square.Client(api_key='API_KEY')

async def example():
    all_databases = await client.all_databases_status()
    
    for database in all_databases:
        print(f"Banco de dados: {database.id}")
        print(f"  CPU: {database.cpu}")
        print(f"  RAM: {database.ram}")
        print(f"  Em execução: {database.running}")
```

## Iniciando um banco de dados

`client.start_database` retorna um objeto `Response`.

```python theme={null}
import squarecloud as square

client = square.Client(api_key='API_KEY')

async def example():
    response = await client.start_database(database_id='DATABASE_ID')
    print(f"Banco de dados iniciado: {response.status}")
```

## Parando um banco de dados

`client.stop_database` retorna um objeto `Response`.

```python theme={null}
import squarecloud as square

client = square.Client(api_key='API_KEY')

async def example():
    response = await client.stop_database(database_id='DATABASE_ID')
    print(f"Banco de dados parado: {response.status}")
```

## Editando um banco de dados

`client.edit_database` retorna um objeto `Response`. Você pode atualizar o nome do banco de dados e/ou alocação de memória.

```python theme={null}
import squarecloud as square

client = square.Client(api_key='API_KEY')

async def example():
    # Atualizar nome do banco de dados
    response = await client.edit_database(
        database_id='DATABASE_ID',
        name='novo_nome_banco_dados'
    )
    
    # Atualizar alocação de memória
    response = await client.edit_database(
        database_id='DATABASE_ID',
        memory=2048  # Nova memória em MB
    )
    
    # Atualizar nome e memória
    response = await client.edit_database(
        database_id='DATABASE_ID',
        name='novo_nome',
        memory=2048
    )
    
    print(f"Banco de dados atualizado: {response.status}")
```

## Deletando um banco de dados

`client.delete_database` retorna um objeto `Response`.

```python theme={null}
import squarecloud as square

client = square.Client(api_key='API_KEY')

async def example():
    response = await client.delete_database(database_id='DATABASE_ID')
    print(f"Banco de dados deletado: {response.status}")
```

## Gerenciando credenciais do banco de dados

### Obtendo o certificado do banco de dados

`client.get_database_certificate` retorna um objeto `Certificate`.

```python theme={null}
import squarecloud as square

client = square.Client(api_key='API_KEY')

async def example():
    certificate = await client.get_database_certificate(database_id='DATABASE_ID')
    
    # Salvar certificado em arquivo
    certificate.save()  # Salva como 'certificate.pem' por padrão
    
    # Salvar certificado com nome personalizado
    certificate.save(filename='meu_cert', export_to='cert')
    
    # Salvar certificado em diretório específico
    certificate.save(dir='./certs', filename='meu_cert', export_to='cert')
```

### Resetando a senha do banco de dados

`client.reset_database_password` retorna uma string com a nova senha.

```python theme={null}
import squarecloud as square

client = square.Client(api_key='API_KEY')

async def example():
    new_password = await client.reset_database_password(database_id='DATABASE_ID')
    print(f"Nova senha: {new_password}")
```

### Resetando o certificado do banco de dados

`client.reset_database_certificate` retorna um objeto `Response`.

```python theme={null}
import squarecloud as square

client = square.Client(api_key='API_KEY')

async def example():
    response = await client.reset_database_certificate(database_id='DATABASE_ID')
    print(f"Certificado resetado: {response.status}")
```

## Estruturas de dados do banco de dados

### Database

O objeto `Database` representa um banco de dados recém-criado com detalhes completos:

| Propriedade      | Tipo          | Descrição                                              |
| ---------------- | ------------- | ------------------------------------------------------ |
| `id`             | `str`         | Identificador único do banco de dados                  |
| `name`           | `str`         | Nome do banco de dados                                 |
| `type`           | `str`         | Tipo de banco de dados (redis, mongo, mysql, postgres) |
| `cluster`        | `str`         | Informações do cluster do banco de dados               |
| `memory`         | `int`         | Memória alocada (MB)                                   |
| `cpu`            | `int`         | CPU alocada (vCPU)                                     |
| `password`       | `str`         | Senha do banco de dados                                |
| `certificate`    | `Certificate` | Certificado TLS para conexão segura                    |
| `connection_url` | `str`         | URL de conexão para o banco de dados                   |

### DatabaseInfo

O objeto `DatabaseInfo` contém informações sobre um banco de dados existente:

| Propriedade  | Tipo  | Descrição                                              |
| ------------ | ----- | ------------------------------------------------------ |
| `id`         | `str` | Identificador único do banco de dados                  |
| `name`       | `str` | Nome do banco de dados                                 |
| `type`       | `str` | Tipo de banco de dados (redis, mongo, mysql, postgres) |
| `cluster`    | `str` | Informações do cluster do banco de dados               |
| `owner`      | `str` | ID do usuário proprietário do banco de dados           |
| `port`       | `int` | Porta do banco de dados                                |
| `ram`        | `int` | Uso atual de RAM (MB)                                  |
| `created_at` | `str` | Timestamp de criação (ISO 8601)                        |

### StatusData

O objeto `StatusData` contém informações de status em tempo real sobre um banco de dados:

| Propriedade | Tipo   | Descrição                              |
| ----------- | ------ | -------------------------------------- |
| `ram`       | `str`  | Uso atual de RAM                       |
| `cpu`       | `str`  | Porcentagem de uso de CPU              |
| `network`   | `dict` | Estatísticas de rede (upload/download) |
| `running`   | `bool` | Se o banco de dados está em execução   |
| `storage`   | `str`  | Uso de armazenamento                   |

## Tipos de banco de dados suportados

A Square Cloud oferece suporte aos seguintes bancos de dados:

| Tipo       | Versão Padrão | Descrição                                                               |
| ---------- | ------------- | ----------------------------------------------------------------------- |
| `redis`    | 7.4.5         | Armazenamento de dados em memória para cache e aplicações em tempo real |
| `mongo`    | 8.0.11        | Banco de dados NoSQL de documentos                                      |
| `mysql`    | 9.5           | Banco de dados relacional                                               |
| `postgres` | 17.6          | Banco de dados relacional avançado                                      |
