---
title: "Quickstart"
description: "Quickstart guide for Aerospike Developer SDK: Create, read, and query records using Java or Python in under 5 minutes."
---

# Quickstart

> For the complete documentation index see: [llms.txt](https://aerospike.com/docs/llms.txt)
> 
> All documentation pages available in markdown.

## Applies to

-   Aerospike Developer SDK (Java 21+ and Python 3.11+)
-   Aerospike Database 6.0 or later unless a section states otherwise

::: code examples
Examples assume a connected `session` from [Connect to Aerospike](https://aerospike.com/docs/develop/client/sdk/connect). Each usage guide lists shared imports in a tabbed block near the top of the page; snippet blocks add imports only for types not already shown. The first code block in each section includes dataset setup; later blocks in that section reuse those values. When a page includes a **Complete example** section, that block is fully self-contained.
:::

Create, read, and query records in Aerospike using the Developer SDK. This quickstart gets you from zero to working code in under 5 minutes.

## Prerequisites

-   Java 21+ or Python 3.11+
-   Access to an Aerospike cluster (or [run one locally](https://aerospike.com/docs/database/install/docker/))

## Procedure

1.  Install the SDK.
    
    -   [Java](#tab-panel-4261)
    -   [Python](#tab-panel-4262)
    
    ### Maven
    
    Add the dependency to your `pom.xml`:
    
    ```xml
    <dependency>
    
        <groupId>com.aerospike</groupId>
    
        <artifactId>aerospike-client-sdk</artifactId>
    
        <version>1.0.0</version>
    
    </dependency>
    ```
    
    ### Gradle (Groovy)
    
    Add to your `build.gradle`:
    
    ```groovy
    dependencies {
    
        implementation 'com.aerospike:aerospike-client-sdk:1.0.0'
    
    }
    ```
    
    ### Gradle (Kotlin)
    
    Add to your `build.gradle.kts`:
    
    ```kotlin
    dependencies {
    
        implementation("com.aerospike:aerospike-client-sdk:1.0.0")
    
    }
    ```
    
    Terminal window
    
    ```bash
    pip install aerospike-sdk
    ```
    
2.  Connect to Aerospike.
    
    -   [Java](#tab-panel-4251)
    -   [Python](#tab-panel-4252)
    
    ```java
    import com.aerospike.client.sdk.policy.Behavior;
    
    import com.aerospike.client.sdk.Cluster;
    
    import com.aerospike.client.sdk.ClusterDefinition;
    
    import com.aerospike.client.sdk.Session;
    
    try (Cluster cluster = new ClusterDefinition("localhost", 3000).connect()) {
    
        Session session = cluster.createSession(Behavior.DEFAULT);
    
        System.out.println("Connected to Aerospike!");
    
        // ... your code here ...
    
    }
    ```
    
    > 📖 **API reference**: [`ClusterDefinition(String,int)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/ClusterDefinition.html#%3Cinit%3E%28java.lang.String%2Cint%29) | [`ClusterDefinition.connect()`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/ClusterDefinition.html#connect%28%29) | [`Cluster.createSession(Behavior)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/Cluster.html#createSession%28com.aerospike.client.sdk.policy.Behavior%29) | [`Cluster.close()`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/Cluster.html#close%28%29)
    
    ```python
    import asyncio
    
    from aerospike_sdk import Behavior, ClusterDefinition
    
    async def main():
    
        async with await ClusterDefinition("localhost", 3000).connect() as cluster:
    
            session = cluster.create_session(Behavior.DEFAULT)
    
            print("Connected to Aerospike!")
    
            # ... your code here ...
    
    asyncio.run(main())
    ```
    
    > 📖 **API reference**: [`ClusterDefinition`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/cluster-definition.html#aerospike%5Fsdk.aio.cluster%5Fdefinition.ClusterDefinition) | [`Cluster.create_session()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/cluster.html#aerospike%5Fsdk.aio.cluster.Cluster.create%5Fsession) | [`Behavior.DEFAULT`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/behavior.html#aerospike%5Fsdk.policy.behavior.Behavior.DEFAULT)
    
3.  Create a record.
    
    -   [Java](#tab-panel-4253)
    -   [Python](#tab-panel-4254)
    
    ```java
    // Define your dataset (namespace + set)
    
    DataSet users = DataSet.of("test", "users");
    
    // Create or update a record
    
    session.upsert(users)
    
        .bins("name", "email", "age")
    
        .id("user-1").values("Alice Smith", "alice@example.com", 28)
    
        .execute();
    
    System.out.println("Record created!");
    ```
    
    > 📖 **API reference**: [`DataSet.of(...)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/DataSet.html#of%28java.lang.String%2Cjava.lang.String%29) | [`Session.upsert(DataSet)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/Session.html#upsert%28com.aerospike.client.sdk.DataSet%29) | [`OperationObjectBuilder.bins(...)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/OperationObjectBuilder.html#bins%28java.lang.String%2Cjava.lang.String...%29) | [`IdValuesBuilder.id(...)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/IdValuesBuilder.html#id%28java.lang.String%29) | [`IdValuesRowBuilder.values(...)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/IdValuesRowBuilder.html#values%28java.lang.Object...%29) | [`ChainableQueryBuilder.execute()`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/ChainableQueryBuilder.html#execute%28%29)
    
    ```python
    # Define your dataset (namespace + set)
    
    users = DataSet.of("test", "users")
    
    # Create or update a record
    
    await session.upsert(key=users.id("user-1")).put({
    
        "name": "Alice Smith",
    
        "email": "alice@example.com",
    
        "age": 28,
    
    }).execute()
    
    print("Record created!")
    ```
    
    > 📖 **API reference**: [`DataSet.of()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/dataset.html#aerospike%5Fsdk.dataset.DataSet.of) | [`DataSet.id()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/dataset.html#aerospike%5Fsdk.dataset.DataSet.id) | [`Session.upsert()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/session.html#aerospike%5Fsdk.aio.session.Session.upsert) | [`WriteSegmentBuilder.put()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/write-segment.html#aerospike%5Fsdk.aio.operations.query.WriteSegmentBuilder.put) | [`WriteSegmentBuilder.execute()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/write-segment.html#aerospike%5Fsdk.aio.operations.query.WriteSegmentBuilder.execute)
    
4.  Read it back.
    
    -   [Java](#tab-panel-4255)
    -   [Python](#tab-panel-4256)
    
    ```java
    // Read the record by key
    
    RecordStream readStream = session.query(users.id("user-1")).execute();
    
    readStream.getFirst().ifPresent(result -> {
    
        Record user = result.recordOrThrow();
    
        System.out.println("Name: " + user.getString("name"));
    
        System.out.println("Email: " + user.getString("email"));
    
        System.out.println("Age: " + user.getInt("age"));
    
    });
    
    // Output:
    
    // Name: Alice Smith
    
    // Email: alice@example.com
    
    // Age: 28
    ```
    
    > 📖 **API reference**: [`DataSet.id(...)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/DataSet.html#id%28java.lang.String%29) | [`Session.query(Key)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/Session.html#query%28com.aerospike.client.sdk.Key%29) | [`ChainableQueryBuilder.execute()`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/ChainableQueryBuilder.html#execute%28%29) | [`RecordStream.getFirst()`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/RecordStream.html#getFirst%28%29) | [`RecordResult.recordOrThrow()`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/RecordResult.html#recordOrThrow%28%29) | [`Record.getString(...)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/Record.html#getString%28java.lang.String%29) | [`Record.getInt(...)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/Record.html#getInt%28java.lang.String%29)
    
    ```python
    # Read the record by key
    
    stream = await session.query(users.id("user-1")).execute()
    
    row = await stream.first_or_raise()
    
    user = row.record_or_raise()
    
    print(f"Name: {user.bins.get('name')}")
    
    print(f"Email: {user.bins.get('email')}")
    
    print(f"Age: {user.bins.get('age')}")
    
    stream.close()
    
    # Output:
    
    # Name: Alice Smith
    
    # Email: alice@example.com
    
    # Age: 28
    ```
    
    > 📖 **API reference**: [`DataSet.id()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/dataset.html#aerospike%5Fsdk.dataset.DataSet.id) | [`Session.query()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/session.html#aerospike%5Fsdk.aio.session.Session.query) | [`RecordResult.record_or_raise()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/record-result.html#aerospike%5Fsdk.record%5Fresult.RecordResult.record%5For%5Fraise) | [`RecordStream.first_or_raise()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/record-stream.html#aerospike%5Fsdk.record%5Fstream.RecordStream.first%5For%5Fraise) | [`RecordStream.close()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/record-stream.html#aerospike%5Fsdk.record%5Fstream.RecordStream.close) | [`QueryBuilder.execute()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/query.html#aerospike%5Fsdk.aio.operations.query.QueryBuilder.execute)
    
5.  Query with AEL.
    
    -   [Java](#tab-panel-4257)
    -   [Python](#tab-panel-4258)
    
    ```java
    // Add a few more users first
    
    session.upsert(users)
    
        .bins("name", "age")
    
        .id("user-2").values("Bob Jones", 35)
    
        .id("user-3").values("Carol White", 22)
    
        .execute();
    
    // Query users over 25
    
    RecordStream queryStream = session.query(users)
    
        .where("$.age > 25")
    
        .execute();
    
    int count = 0;
    
    while (queryStream.hasNext()) {
    
        RecordResult result = queryStream.next();
    
        Record r = result.recordOrThrow();
    
        count++;
    
        System.out.println("  - " + r.getString("name"));
    
    }
    
    queryStream.close();
    
    System.out.println("Found " + count + " users over 25");
    
    // Output:
    
    // - Alice Smith
    
    // - Bob Jones
    
    // Found 2 users over 25
    
    // NOTE: A dataset-wide query without an ordering
    
    // clause can return records in any order.
    ```
    
    > 📖 **API reference**: [`Session.upsert(DataSet)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/Session.html#upsert%28com.aerospike.client.sdk.DataSet%29) | [`Session.query(DataSet)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/Session.html#query%28com.aerospike.client.sdk.DataSet%29) | [`OperationObjectBuilder.bins(...)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/OperationObjectBuilder.html#bins%28java.lang.String%2Cjava.lang.String...%29) | [`IdValuesBuilder.id(...)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/IdValuesBuilder.html#id%28java.lang.String%29) | [`IdValuesRowBuilder.values(...)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/IdValuesRowBuilder.html#values%28java.lang.Object...%29) | [`ChainableQueryBuilder.where(...)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/ChainableQueryBuilder.html#where%28java.lang.String%2Cjava.lang.Object...%29) | [`ChainableQueryBuilder.execute()`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/ChainableQueryBuilder.html#execute%28%29) | [`RecordStream.hasNext()`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/RecordStream.html#hasNext%28%29) | [`RecordStream.next()`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/RecordStream.html#next%28%29) | [`RecordStream.close()`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/RecordStream.html#close%28%29) | [`RecordResult.recordOrThrow()`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/RecordResult.html#recordOrThrow%28%29) | [`Record.getString(...)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/Record.html#getString%28java.lang.String%29)
    
    ```python
    # Add a few more users first
    
    await session.upsert(key=users.id("user-2")).put({"name": "Bob Jones", "age": 35}).execute()
    
    await session.upsert(key=users.id("user-3")).put({"name": "Carol White", "age": 22}).execute()
    
    # Query users over 25
    
    stream = await session.query(users).where("$.age > 25").execute()
    
    count = 0
    
    async for row in stream:
    
        if row.is_ok:
    
            count += 1
    
            print(f"  - {row.record_or_raise().bins.get('name')}")
    
    stream.close()
    
    print(f"Found {count} users over 25")
    
    # Output:
    
    # - Alice Smith
    
    # - Bob Jones
    
    # Found 2 users over 25
    ```
    
    > 📖 **API reference**: [`DataSet.id()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/dataset.html#aerospike%5Fsdk.dataset.DataSet.id) | [`Session.query()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/session.html#aerospike%5Fsdk.aio.session.Session.query) | [`Session.upsert()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/session.html#aerospike%5Fsdk.aio.session.Session.upsert) | [`QueryBuilder.where()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/query.html#aerospike%5Fsdk.aio.operations.query.QueryBuilder.where) | [`WriteSegmentBuilder.put()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/write-segment.html#aerospike%5Fsdk.aio.operations.query.WriteSegmentBuilder.put) | [`RecordResult.record_or_raise()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/record-result.html#aerospike%5Fsdk.record%5Fresult.RecordResult.record%5For%5Fraise) | [`RecordStream.close()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/record-stream.html#aerospike%5Fsdk.record%5Fstream.RecordStream.close) | [`QueryBuilder.execute()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/query.html#aerospike%5Fsdk.aio.operations.query.QueryBuilder.execute) | [`WriteSegmentBuilder.execute()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/write-segment.html#aerospike%5Fsdk.aio.operations.query.WriteSegmentBuilder.execute)
    

## Complete code

-   [Java](#tab-panel-4259)
-   [Python](#tab-panel-4260)

```java
import com.aerospike.client.sdk.policy.Behavior;

import com.aerospike.client.sdk.Cluster;

import com.aerospike.client.sdk.ClusterDefinition;

import com.aerospike.client.sdk.DataSet;

import com.aerospike.client.sdk.Record;

import com.aerospike.client.sdk.RecordResult;

import com.aerospike.client.sdk.RecordStream;

import com.aerospike.client.sdk.Session;

public class QuickstartApp {

    public static void main(String[] args) {

        DataSet users = DataSet.of("test", "users");

        try (Cluster cluster = new ClusterDefinition("localhost", 3000).connect()) {

            Session session = cluster.createSession(Behavior.DEFAULT);

            // Create / update a few records

            session.upsert(users)

                .bins("name", "email", "age", "status")

                .id("user-1").values("Alice Smith", "alice@example.com", 28, "active")

                .id("user-2").values("Bob Jones", "bob@example.com", 35, "active")

                .id("user-3").values("Carol White", "carol@example.com", 22, "inactive")

                .execute();

            // Read one record

            // Query active adults

            RecordStream queryStream = session.query(users)

                .where("$.status == 'active' and $.age >= 18")

                .execute();

            int adultCount = 0;

            while (queryStream.hasNext()) {

                RecordResult result = queryStream.next();

                Record record = result.recordOrThrow();

                adultCount++;

                System.out.println("Adult user: " + record.getString("name"));

            }

            queryStream.close();

            System.out.println("Found " + adultCount + " active adults");

            // Cleanup so the example is repeatable.

            session.delete(users.ids("user-1", "user-2", "user-3")).execute();

        }

    }

}
```

> 📖 **API reference**: [`ClusterDefinition(String,int)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/ClusterDefinition.html#%3Cinit%3E%28java.lang.String%2Cint%29) | [`ClusterDefinition.connect()`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/ClusterDefinition.html#connect%28%29) | [`Cluster.createSession(Behavior)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/Cluster.html#createSession%28com.aerospike.client.sdk.policy.Behavior%29) | [`Cluster.close()`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/Cluster.html#close%28%29) | [`DataSet.of(...)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/DataSet.html#of%28java.lang.String%2Cjava.lang.String%29) | [`DataSet.ids(...)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/DataSet.html#ids%28java.lang.String...%29) | [`Session.upsert(DataSet)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/Session.html#upsert%28com.aerospike.client.sdk.DataSet%29) | [`Session.delete(List)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/Session.html#delete%28java.util.List%29) | [`Session.delete(Key)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/Session.html#delete%28com.aerospike.client.sdk.Key%29) | [`Session.query(DataSet)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/Session.html#query%28com.aerospike.client.sdk.DataSet%29) | [`OperationObjectBuilder.bins(...)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/OperationObjectBuilder.html#bins%28java.lang.String%2Cjava.lang.String...%29) | [`IdValuesBuilder.id(...)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/IdValuesBuilder.html#id%28java.lang.String%29) | [`IdValuesRowBuilder.values(...)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/IdValuesRowBuilder.html#values%28java.lang.Object...%29) | [`ChainableQueryBuilder.where(...)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/ChainableQueryBuilder.html#where%28java.lang.String%2Cjava.lang.Object...%29) | [`ChainableQueryBuilder.execute()`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/ChainableQueryBuilder.html#execute%28%29) | [`RecordStream.hasNext()`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/RecordStream.html#hasNext%28%29) | [`RecordStream.next()`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/RecordStream.html#next%28%29) | [`RecordStream.close()`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/RecordStream.html#close%28%29) | [`RecordResult.recordOrThrow()`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/RecordResult.html#recordOrThrow%28%29) | [`Record.getString(...)`](https://javadoc.io/doc/com.aerospike/aerospike-client-sdk/latest/com/aerospike/client/sdk/Record.html#getString%28java.lang.String%29)

```python
import asyncio

from aerospike_sdk import Behavior, DataSet, ClusterDefinition

async def main():

    async with await ClusterDefinition("localhost", 3000).connect() as cluster:

        session = cluster.create_session(Behavior.DEFAULT)

        users = DataSet.of("test", "users")

        # Create / update a few records

        await session.upsert(key=users.id("user-1")).put(

            {

                "name": "Alice Smith",

                "email": "alice@example.com",

                "age": 28,

                "status": "active",

            }

        ).execute()

        await session.upsert(key=users.id("user-2")).put(

            {

                "name": "Bob Jones",

                "email": "bob@example.com",

                "age": 35,

                "status": "active",

            }

        ).execute()

        await session.upsert(key=users.id("user-3")).put(

            {

                "name": "Carol White",

                "email": "carol@example.com",

                "age": 22,

                "status": "inactive",

            }

        ).execute()

        # Read one record

        stream = await session.query(users.id("user-1")).execute()

        row = await stream.first_or_raise()

        print(f"Found: {row.record_or_raise().bins.get('name')}")

        stream.close()

        # Query active adults

        stream = await session.query(users).where("$.status == 'active' and $.age >= 18").execute()

        adult_count = 0

        async for row in stream:

            if row.is_ok:

                adult_count += 1

                print(f"Adult user: {row.record_or_raise().bins.get('name')}")

        stream.close()

        print(f"Found {adult_count} active adults")

        # Cleanup so the example is repeatable.

        await session.delete(key=users.id("user-1")).execute()

        await session.delete(key=users.id("user-2")).execute()

        await session.delete(key=users.id("user-3")).execute()

if __name__ == "__main__":

    asyncio.run(main())
```

> 📖 **API reference**: [`ClusterDefinition`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/cluster-definition.html#aerospike%5Fsdk.aio.cluster%5Fdefinition.ClusterDefinition) | [`Cluster.create_session()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/cluster.html#aerospike%5Fsdk.aio.cluster.Cluster.create%5Fsession) | [`DataSet.of()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/dataset.html#aerospike%5Fsdk.dataset.DataSet.of) | [`DataSet.id()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/dataset.html#aerospike%5Fsdk.dataset.DataSet.id) | [`Behavior.DEFAULT`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/behavior.html#aerospike%5Fsdk.policy.behavior.Behavior.DEFAULT) | [`Session.query()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/session.html#aerospike%5Fsdk.aio.session.Session.query) | [`Session.upsert()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/session.html#aerospike%5Fsdk.aio.session.Session.upsert) | [`Session.delete()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/session.html#aerospike%5Fsdk.aio.session.Session.delete) | [`QueryBuilder.where()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/query.html#aerospike%5Fsdk.aio.operations.query.QueryBuilder.where) | [`WriteSegmentBuilder.put()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/write-segment.html#aerospike%5Fsdk.aio.operations.query.WriteSegmentBuilder.put) | [`RecordResult.record_or_raise()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/record-result.html#aerospike%5Fsdk.record%5Fresult.RecordResult.record%5For%5Fraise) | [`RecordStream.first_or_raise()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/record-stream.html#aerospike%5Fsdk.record%5Fstream.RecordStream.first%5For%5Fraise) | [`RecordStream.close()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/record-stream.html#aerospike%5Fsdk.record%5Fstream.RecordStream.close) | [`QueryBuilder.execute()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/query.html#aerospike%5Fsdk.aio.operations.query.QueryBuilder.execute) | [`WriteSegmentBuilder.execute()`](https://aerospike-python-sdk.readthedocs.io/en/latest/api/write-segment.html#aerospike%5Fsdk.aio.operations.query.WriteSegmentBuilder.execute)

## Verify

Confirm the quickstart succeeded using the output from step 5 (Query with AEL) in [Procedure](#procedure):

```plaintext
- Alice Smith

  - Bob Jones

Found 2 users over 25
```

If you ran the complete example program (Python), you should also see `Found: Alice Smith` from the single-key read and `Found 2 active adults` from the query before cleanup. Cleanup deletes should finish without errors.

If connection fails, see [Connect to Aerospike](https://aerospike.com/docs/develop/client/sdk/connect) and [Common issues](https://aerospike.com/docs/develop/client/sdk/reference/common-issues).

## Next steps

Create Records

Learn all the ways to insert, upsert, and configure records.

[Create Records →](https://aerospike.com/docs/develop/client/sdk/usage/create)

Query by Field Values

Filter and search your data with intuitive syntax.

[Find Records →](https://aerospike.com/docs/develop/client/sdk/usage/query)

Tune Performance & Reliability

Configure timeouts, retries, and consistency levels.

[Configure the Client →](https://aerospike.com/docs/develop/client/sdk/concepts/behaviors)

Handle Errors Gracefully

Handle errors with actionable diagnostics.

[Error Handling →](https://aerospike.com/docs/develop/client/sdk/concepts/errors)