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

# Datenbanken verwalten

> In diesem Abschnitt lernst du, wie du Datenbanken mit dem Python SDK verwaltest. Erstelle, rufe ab, aktualisiere, lösche und überwache Datenbanken für deine Anwendungen.

[Client]: client

Datenbanken sind verwaltete Dienste von Square Cloud, mit denen du Daten für deine Anwendungen speichern und verwalten kannst. Zu den unterstützten Datenbanken gehören Redis, MongoDB, MySQL und PostgreSQL.

## Eine Datenbank erstellen

`client.create_database` gibt ein `Database`-Objekt zurück.

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

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

async def example():
    # Create a MongoDB database with 1024MB of memory
    database = await client.create_database(
        name='my_database',
        memory=1024,  # Memory in MB
        type='mongo',  # "redis", "mongo", "mysql", or "postgres"
        version='8.0.11'  # Optional - version will be inferred if not provided
    )
    
    print(database.id)               # Database identifier
    print(database.name)             # Database name
    print(database.type)             # Database type
    print(database.cluster)          # Database cluster
    print(database.memory)           # Memory allocated (MB)
    print(database.cpu)              # CPU allocated
    print(database.password)         # Database password
    print(database.connection_url)   # Connection URL
    print(database.certificate)      # TLS certificate
```

## Datenbankinformationen abrufen

`client.get_database_info` gibt ein `DatabaseInfo`-Objekt zurück.

```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)            # Database identifier
    print(database_info.name)          # Database name
    print(database_info.type)          # Database type
    print(database_info.owner)         # Database owner user ID
    print(database_info.cluster)       # Database cluster
    print(database_info.ram)           # RAM usage in MB
    print(database_info.port)          # Database port
    print(database_info.created_at)    # Creation date (ISO 8601)
    print(database_info.created_at_datetime)  # Creation date as datetime object
```

## Datenbankstatus abrufen

`client.get_database_status` gibt ein `StatusData`-Objekt zurück.

```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)      # RAM usage
    print(status.cpu)      # CPU usage percentage
    print(status.network)  # Network statistics
    print(status.running)  # Whether database is running
    print(status.storage)  # Storage usage
```

## Alle Datenbanken auflisten

`client.all_databases_status` gibt eine Liste von `ResumedStatus`-Objekten zurück.

```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"Database: {database.id}")
        print(f"  CPU: {database.cpu}")
        print(f"  RAM: {database.ram}")
        print(f"  Running: {database.running}")
```

## Eine Datenbank starten

`client.start_database` gibt ein `Response`-Objekt zurück.

```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"Database started: {response.status}")
```

## Eine Datenbank stoppen

`client.stop_database` gibt ein `Response`-Objekt zurück.

```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"Database stopped: {response.status}")
```

## Eine Datenbank bearbeiten

`client.edit_database` gibt ein `Response`-Objekt zurück. Du kannst den Datenbanknamen und/oder die Speicherzuweisung aktualisieren.

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

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

async def example():
    # Update database name
    response = await client.edit_database(
        database_id='DATABASE_ID',
        name='new_database_name'
    )
    
    # Update memory allocation
    response = await client.edit_database(
        database_id='DATABASE_ID',
        memory=2048  # New memory in MB
    )
    
    # Update both name and memory
    response = await client.edit_database(
        database_id='DATABASE_ID',
        name='new_name',
        memory=2048
    )
    
    print(f"Database updated: {response.status}")
```

## Eine Datenbank löschen

`client.delete_database` gibt ein `Response`-Objekt zurück.

```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"Database deleted: {response.status}")
```

## Datenbank-Zugangsdaten verwalten

### Das Datenbankzertifikat abrufen

`client.get_database_certificate` gibt ein `Certificate`-Objekt zurück.

```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')
    
    # Save certificate to file
    certificate.save()  # Saves as 'certificate.pem' by default
    
    # Save certificate with custom filename
    certificate.save(filename='my_cert', export_to='cert')
    
    # Save certificate to specific directory
    certificate.save(dir='./certs', filename='my_cert', export_to='cert')
```

### Das Datenbankpasswort zurücksetzen

`client.reset_database_password` gibt einen neuen Passwort-String zurück.

```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"New password: {new_password}")
```

### Das Datenbankzertifikat zurücksetzen

`client.reset_database_certificate` gibt ein `Response`-Objekt zurück.

```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"Certificate reset: {response.status}")
```

## Datenbank-Datenstrukturen

### Database

Das `Database`-Objekt repräsentiert eine neu erstellte Datenbank mit vollständigen Details:

| Property         | Typ           | Beschreibung                                 |
| ---------------- | ------------- | -------------------------------------------- |
| `id`             | `str`         | Eindeutige Kennung der Datenbank             |
| `name`           | `str`         | Datenbankname                                |
| `type`           | `str`         | Datenbanktyp (redis, mongo, mysql, postgres) |
| `cluster`        | `str`         | Informationen zum Datenbank-Cluster          |
| `memory`         | `int`         | Zugewiesener Speicher (MB)                   |
| `cpu`            | `int`         | Zugewiesene CPU (vCPU)                       |
| `password`       | `str`         | Datenbankpasswort                            |
| `certificate`    | `Certificate` | TLS-Zertifikat für eine sichere Verbindung   |
| `connection_url` | `str`         | Verbindungs-URL für die Datenbank            |

### DatabaseInfo

Das `DatabaseInfo`-Objekt enthält Informationen über eine bestehende Datenbank:

| Property     | Typ   | Beschreibung                                 |
| ------------ | ----- | -------------------------------------------- |
| `id`         | `str` | Eindeutige Kennung der Datenbank             |
| `name`       | `str` | Datenbankname                                |
| `type`       | `str` | Datenbanktyp (redis, mongo, mysql, postgres) |
| `cluster`    | `str` | Informationen zum Datenbank-Cluster          |
| `owner`      | `str` | Benutzer-ID des Datenbankeigentümers         |
| `port`       | `int` | Datenbankport                                |
| `ram`        | `int` | Aktuelle RAM-Nutzung (MB)                    |
| `created_at` | `str` | Erstellungszeitstempel (ISO 8601)            |

### StatusData

Das `StatusData`-Objekt enthält Echtzeit-Statusinformationen über eine Datenbank:

| Property  | Typ    | Beschreibung                          |
| --------- | ------ | ------------------------------------- |
| `ram`     | `str`  | Aktuelle RAM-Nutzung                  |
| `cpu`     | `str`  | Aktuelle CPU-Auslastung in Prozent    |
| `network` | `dict` | Netzwerkstatistiken (Upload/Download) |
| `running` | `bool` | Ob die Datenbank läuft                |
| `storage` | `str`  | Speichernutzung                       |

## Unterstützte Datenbanktypen

Square Cloud unterstützt die folgenden Datenbanken:

| Typ        | Standardversion | Beschreibung                                                |
| ---------- | --------------- | ----------------------------------------------------------- |
| `redis`    | 7.4.5           | In-Memory-Datenspeicher für Caching und Echtzeitanwendungen |
| `mongo`    | 8.0.11          | NoSQL-Dokumentendatenbank                                   |
| `mysql`    | 9.5             | Relationale Datenbank                                       |
| `postgres` | 17.6            | Fortschrittliche relationale Datenbank                      |
