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

# Gérer les bases de données

> Dans cette section, vous apprendrez à gérer des bases de données à l'aide du SDK Python. Créez, récupérez, mettez à jour, supprimez et surveillez les bases de données de vos applications.

[Client]: client

Les bases de données sont des services managés fournis par Square Cloud qui vous permettent de stocker et de gérer les données de vos applications. Les bases de données prises en charge incluent Redis, MongoDB, MySQL et PostgreSQL.

## Créer une base de données

`client.create_database` renvoie un objet `Database`.

```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
```

## Récupérer les informations d'une base de données

`client.get_database_info` renvoie un objet `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)            # 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
```

## Obtenir le statut d'une base de données

`client.get_database_status` renvoie un objet `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)      # 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
```

## Lister toutes les bases de données

`client.all_databases_status` renvoie une liste d'objets `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"Database: {database.id}")
        print(f"  CPU: {database.cpu}")
        print(f"  RAM: {database.ram}")
        print(f"  Running: {database.running}")
```

## Démarrer une base de données

`client.start_database` renvoie un objet `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"Database started: {response.status}")
```

## Arrêter une base de données

`client.stop_database` renvoie un objet `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"Database stopped: {response.status}")
```

## Modifier une base de données

`client.edit_database` renvoie un objet `Response`. Vous pouvez mettre à jour le nom de la base de données et/ou l'allocation de mémoire.

```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}")
```

## Supprimer une base de données

`client.delete_database` renvoie un objet `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"Database deleted: {response.status}")
```

## Gérer les identifiants d'une base de données

### Obtenir le certificat de la base de données

`client.get_database_certificate` renvoie un objet `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')
    
    # 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')
```

### Réinitialiser le mot de passe de la base de données

`client.reset_database_password` renvoie une nouvelle chaîne de mot de passe.

```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}")
```

### Réinitialiser le certificat de la base de données

`client.reset_database_certificate` renvoie un objet `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"Certificate reset: {response.status}")
```

## Structures de données des bases de données

### Database

L'objet `Database` représente une base de données nouvellement créée, avec tous ses détails :

| Propriété        | Type          | Description                                             |
| ---------------- | ------------- | ------------------------------------------------------- |
| `id`             | `str`         | Identifiant unique de la base de données                |
| `name`           | `str`         | Nom de la base de données                               |
| `type`           | `str`         | Type de base de données (redis, mongo, mysql, postgres) |
| `cluster`        | `str`         | Informations sur le cluster de la base de données       |
| `memory`         | `int`         | Mémoire allouée (MB)                                    |
| `cpu`            | `int`         | CPU alloué (vCPU)                                       |
| `password`       | `str`         | Mot de passe de la base de données                      |
| `certificate`    | `Certificate` | Certificat TLS pour une connexion sécurisée             |
| `connection_url` | `str`         | URL de connexion à la base de données                   |

### DatabaseInfo

L'objet `DatabaseInfo` contient des informations sur une base de données existante :

| Propriété    | Type  | Description                                             |
| ------------ | ----- | ------------------------------------------------------- |
| `id`         | `str` | Identifiant unique de la base de données                |
| `name`       | `str` | Nom de la base de données                               |
| `type`       | `str` | Type de base de données (redis, mongo, mysql, postgres) |
| `cluster`    | `str` | Informations sur le cluster de la base de données       |
| `owner`      | `str` | ID utilisateur du propriétaire de la base de données    |
| `port`       | `int` | Port de la base de données                              |
| `ram`        | `int` | Utilisation actuelle de la RAM (MB)                     |
| `created_at` | `str` | Horodatage de création (ISO 8601)                       |

### StatusData

L'objet `StatusData` contient des informations de statut en temps réel sur une base de données :

| Propriété | Type   | Description                                            |
| --------- | ------ | ------------------------------------------------------ |
| `ram`     | `str`  | Utilisation actuelle de la RAM                         |
| `cpu`     | `str`  | Pourcentage d'utilisation actuel du CPU                |
| `network` | `dict` | Statistiques réseau (upload/download)                  |
| `running` | `bool` | Indique si la base de données est en cours d'exécution |
| `storage` | `str`  | Utilisation du stockage                                |

## Types de bases de données pris en charge

Square Cloud prend en charge les bases de données suivantes :

| Type       | Version par défaut | Description                                                                   |
| ---------- | ------------------ | ----------------------------------------------------------------------------- |
| `redis`    | 7.4.5              | Magasin de données en mémoire pour le cache et les applications en temps réel |
| `mongo`    | 8.0.11             | Base de données documentaire NoSQL                                            |
| `mysql`    | 9.5                | Base de données relationnelle                                                 |
| `postgres` | 17.6               | Base de données relationnelle avancée                                         |
