> ## 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.

# SDK Python: bancos de dados gerenciados

> Crie, inspecione, atualize, inicie, pare e exclua bancos de dados gerenciados, leia seu status e suas métricas e gerencie suas credenciais com client.databases.

`client.databases` gerencia os bancos de dados gerenciados da Square Cloud (MongoDB, MySQL, PostgreSQL e Redis). Todos os métodos, exceto `create` e `status_all`, recebem o id do banco de dados primeiro. Para listar seus bancos de dados, use [`client.account.me()`](/pt-br/sdks/py/client#conta): sua lista `databases` contém todos os bancos de dados que a chave pode ver.

A hospedagem de bancos de dados requer um plano Standard, Pro ou Enterprise.

Os exemplos usam o `client` de [Criando o cliente](/pt-br/sdks/py/client#criando-o-cliente). `database_id` é o id de um dos seus bancos de dados: [`client.account.me()`](/pt-br/sdks/py/client#conta) lista todos.

## Criando um banco de dados

`databases.create(name, type=, version=, memory=)` recebe o nome por posição e os outros campos como argumentos **keyword-only**.

```python theme={"system"}
db = client.databases.create(
    "my-db",
    type="postgres",  # "mongo" | "mysql" | "redis" | "postgres"
    version="17",     # a full version or a prefix
    memory=1024,      # MB, an int
)

print(db["id"], db["connection_url"], db["cluster"])
print(db["password"])            # shown only here: save it
print(db.get("certificate"))     # base64 PEM (private key, then certificate), or None
```

| Campo | Descrição |
| - | - |
| `name` | De 1 a 32 caracteres |
| `type` | `mongo`, `mysql`, `redis` ou `postgres` |
| `version` | Uma versão completa ou um prefixo como `"8"` |
| `memory` | MB, um `int`. Pelo menos 512 para Redis e 1024 para os demais |

O `password` e o `certificate` são retornados apenas por `create()` (e por [`reset_credentials()`](#credenciais)). A chamada espera pelo menos 120 s antes de expirar.

| Status | Código | Quando |
| - | - | - |
| 400 | `INVALID_NAME` | O nome não tem de 1 a 32 caracteres |
| 400 | `INVALID_DATABASE_TYPE`, `INVALID_DATABASE_VERSION` | Tipo desconhecido ou versão não suportada |
| 400 | `INVALID_MEMORY` | `memory` não é um `int` (um `float` ou uma string) |
| 400 | `INSUFFICIENT_MEMORY` | `memory` está abaixo do mínimo ou excede a memória disponível |
| 400 | `CLUSTER_SELECTION_FAILED` | Nenhum cluster tinha capacidade suficiente |
| 400 / 500 | `DATABASE_CREATION_FAILED` | O provisionamento falhou |
| 403 | `UPGRADE_REQUIRED` | O plano não inclui hospedagem de bancos de dados |
| 503 | `CLUSTER_MAINTENANCE_TRY_LATER` | O provisionamento está pausado para manutenção |

## Obtendo um banco de dados

```python theme={"system"}
db = client.databases.get(database_id)

print(db["id"], db["name"], db["type"], db["ram"], db["port"], db["cluster"], db["created_at"])
```

## Atualizando um banco de dados

`update(database_id, name=None, ram=None)` renomeia ou redimensiona um banco de dados. Os dois argumentos são keyword-only, e os que ficam como `None` não são enviados. Passe pelo menos um (caso contrário, 400 `NO_UPDATE_DATA`).

```python theme={"system"}
client.databases.update(database_id, name="orders", ram=2048)
```

## Iniciar e parar

```python theme={"system"}
client.databases.start(database_id)
client.databases.stop(database_id)
```

Assim como as chamadas de ciclo de vida das aplicações, elas esperam pelo menos 120 s, e uma recusa resulta em **409** com um código e uma mensagem vazia: `CONTAINER_ALREADY_STARTED`, `CONTAINER_ALREADY_STOPPED`, `CONTAINER_NOT_FOUND`, `CONTAINER_INSUFFICIENT_DISK_SPACE`, `CONTAINER_NETWORK_CONFLICT` ou `ACTION_FAILED`. Enquanto uma restauração de snapshot está em andamento, elas resultam em 403 `RESTORE_IN_PROGRESS`.

## Status e métricas

`status(database_id)` retorna valores formatados; `raw=True` (keyword-only) retorna números. `status_all()` retorna um resumo por banco de dados. `metrics(database_id)` retorna as últimas 24 horas, um ponto a cada 5 minutos, do mais recente para o mais antigo.

```python theme={"system"}
status = client.databases.status(database_id)
print(status["running"], status["cpu"], status["ram"])  # True "0.5%" "120.4MB"

raw = client.databases.status(database_id, raw=True)
print(raw["cpu"], raw["ram"])  # 0.5 120.4

for item in client.databases.status_all():
    print(item["id"], item["running"], item.get("cpu"), item.get("ram"))  # cpu and ram only while running

latest = client.databases.metrics(database_id)[0]
print(latest["date"], latest["cpu"], latest["ram"])
```

Os campos de status são os mesmos do [status de aplicações](/pt-br/sdks/py/managing_application#status).

## Credenciais

`certificate(database_id)` retorna o certificado TLS como PEM codificado em base64. `reset_credentials(database_id, type)` rotaciona a senha (e retorna a nova) ou o certificado (e retorna `''`). O banco de dados precisa estar em execução (400 `DATABASE_NOT_RUNNING`).

```python theme={"system"}
import base64

certificate = client.databases.certificate(database_id)
pem = base64.b64decode(certificate).decode()

password = client.databases.reset_credentials(database_id, "password")
client.databases.reset_credentials(database_id, "certificate")  # ''
```

## Excluindo um banco de dados

```python theme={"system"}
client.databases.delete(database_id)
```

<Warning>
  A exclusão é permanente. Crie um [snapshot](/pt-br/sdks/py/snapshots) antes, caso você possa precisar dos dados novamente.
</Warning>

## Snapshots

`client.databases.snapshots` tem os mesmos `list`, `create` e `restore` das aplicações. Veja [Snapshots](/pt-br/sdks/py/snapshots).

## Próximos passos

<CardGroup cols={3}>
  <Card title="Workspaces" icon="users" href="/pt-br/sdks/py/workspaces">
    Compartilhe aplicações com sua equipe.
  </Card>

  <Card title="Referência da API de bancos de dados" icon="code" href="/pt-br/api-reference/endpoint/databases/create">
    Os endpoints REST por trás destes métodos.
  </Card>

  <Card title="Bancos de dados pela CLI" icon="terminal" href="/pt-br/cli-reference/databases">
    As mesmas ações pelo terminal.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.