すべてのプロダクト
Search
ドキュメントセンター

Lindorm:非 Java 言語の Cassandra CQL ドライバーを用いたアプリケーション開発

最終更新日:Mar 29, 2026

Cassandra Query Language (CQL) を使用して LindormTable に接続するには、Python、C++、Node.js、Go など、ご利用のプログラミング言語に対応した公式 Cassandra クライアントドライバーをご利用ください。

前提条件

開始する前に、以下の準備が完了していることを確認してください。

  • LindormTable の CQL 接続アドレスを取得済みであること。CQL connection address

  • 対象言語向けの公式ドライバーパッケージがインストール済みであること。対応ドライバーの一覧については、「Cassandra クライアントドライバー」をご参照ください。

Python を使用した接続

ドライバーのインストール

DataStax 社提供の Python ドライバーをインストールします。バージョン 3.x を推奨します。

# 特定バージョンのインストール(推奨)
pip install cassandra-driver==3.19.0

# 最新バージョンのインストール
pip install cassandra-driver

インストールを確認します。

python -c "import cassandra; print(cassandra.__version__)"

このコマンドは、インストール済みのバージョン番号(例: 3.19.0)を表示します。

接続とクエリの実行

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import logging
import sys
from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider

logging.basicConfig(stream=sys.stdout, level=logging.INFO)

# LindormTable の CQL エンドポイントでクラスターを初期化します。
# ポート番号の指定は不要です。
cluster = Cluster(
    contact_points=["ld-bp17j28j2y7pm****-proxy-lindorm.lindorm.rds.aliyuncs.com"],
    auth_provider=PlainTextAuthProvider("cassandra", "****"))

session = cluster.connect()

# キースペースを作成します。
session.execute(
    "CREATE KEYSPACE IF NOT EXISTS testKeyspace WITH replication = {'class':'SimpleStrategy', 'replication_factor':1};")

# テーブルを作成します。
session.execute(
    "CREATE TABLE IF NOT EXISTS testKeyspace.testTable (id int PRIMARY KEY, name text, age int, address text);")

# 1 行を挿入します。
session.execute(
    "INSERT INTO testKeyspace.testTable (id, name, age, address) VALUES (1, 'testname', 11, 'hangzhou');")

# 行をクエリします。
rows = session.execute("SELECT * FROM testKeyspace.testTable;")
for row in rows:
    print("Row: {}".format(row))

# リソースを解放します。
session.shutdown()
cluster.shutdown()

C++ を使用した接続

ドライバーのダウンロード

DataStax 社提供の C++ ドライバーを「datastax/cpp-driver」からダウンロードします。

接続とクエリの実行

CassFuture* connect_future = NULL;
CassCluster* cluster = cass_cluster_new();
CassSession* session = cass_session_new();

// LindormTable の CQL エンドポイントを指定します。ポート番号の指定は不要です。
const char* hosts = "ld-bp17j28j2y7pm****-proxy-lindorm.lindorm.rds.aliyuncs.com";

cass_cluster_set_contact_points(cluster, hosts);
connect_future = cass_session_connect(session, cluster);

if (cass_future_error_code(connect_future) == CASS_OK) {
    // SELECT クエリを実行します。
    const char* query = "SELECT name FROM testKeyspace.testTable";
    CassStatement* statement = cass_statement_new(query, 0);
    CassFuture* result_future = cass_session_execute(session, statement);

    if (cass_future_error_code(result_future) == CASS_OK) {
        // 結果を処理します。
        const CassResult* result = cass_future_get_result(result_future);
        const CassRow* row = cass_result_first_row(result);

        if (row) {
            const CassValue* value = cass_row_get_column_by_name(row, "name");
            const char* name;
            size_t name_length;
            cass_value_get_string(value, &name, &name_length);
            printf("release_version: '%.*s'\n", (int)name_length, name);
        }

        cass_result_free(result);
    } else {
        // クエリエラーを処理します。
        const char* message;
        size_t message_length;
        cass_future_error_message(result_future, &message, &message_length);
        fprintf(stderr, "クエリを実行できませんでした: '%.*s'\n", (int)message_length, message);
    }

    cass_statement_free(statement);
    cass_future_free(result_future);

    // セッションを閉じ、リソースを解放します。
    CassFuture* close_future = cass_session_close(session);
    cass_future_wait(close_future);
    cass_future_free(close_future);
} else {
    // 接続エラーを処理します。
    const char* message;
    size_t message_length;
    cass_future_error_message(connect_future, &message, &message_length);
    fprintf(stderr, "接続できませんでした: '%.*s'\n", (int)message_length, message);
}

cass_future_free(connect_future);
cass_cluster_free(cluster);
cass_session_free(session);

Node.js を使用した接続

ドライバーのインストール

npm install cassandra-driver

接続とクエリの実行

localDataCenterdatacenter1 に設定します。ドライバーは Promise を返すため、.then() チェーンまたは async/await のいずれかを自由に使用できます。

const cassandra = require('cassandra-driver');

// クライアントを初期化します。エンドポイントにはポート番号を含める必要はありません。
// localDataCenter を 'datacenter1' に設定します。
const client = new cassandra.Client({
    contactPoints: ['ld-bp17j28j2y7pm****-proxy-lindorm.lindorm.rds.aliyuncs.com'],
    localDataCenter: 'datacenter1',
    credentials: { username: 'Username', password: 'Password' }
});

client.connect()
    .then(() => client.execute("CREATE KEYSPACE IF NOT EXISTS lindormtest WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '2' }"))
    .then(() => client.execute("CREATE TABLE IF NOT EXISTS lindormtest.nodejs (name text PRIMARY KEY, age int)"))
    .then(() => client.execute("INSERT INTO lindormtest.nodejs (name, age) VALUES ('lindorm', 10)"))
    .then(() => client.execute("SELECT name, age FROM lindormtest.nodejs WHERE name = 'lindorm'"))
    .then(result => {
        const row = result.first();
        console.log('Row:', row);
    })
    .finally(() => client.shutdown());

Go を使用した接続

ドライバーのインストール

go get github.com/gocql/gocql

接続とクエリの実行

package main

import (
    "fmt"
    "log"

    "github.com/gocql/gocql"
)

func main() {
    // LindormTable の CQL エンドポイントを指定します。ポート番号の指定は不要です。
    cluster := gocql.NewCluster("ld-bp17j28j2y7pm****-proxy-lindorm.lindorm.rds.aliyuncs.com")
    cluster.Authenticator = gocql.PasswordAuthenticator{
        Username: "Username",
        Password: "Password",
    }

    session, err := cluster.CreateSession()
    if err != nil {
        log.Fatal(err)
    }
    defer session.Close()

    // キースペースを作成します。
    if err := session.Query(`CREATE KEYSPACE ks WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 2}`).Exec(); err != nil {
        log.Fatal(err)
    }

    // テーブルを作成します。
    if err := session.Query(`CREATE TABLE ks.tb (cn1 text PRIMARY KEY, cn2 text, cn3 text)`).Exec(); err != nil {
        log.Fatal(err)
    }

    // 1 行を挿入します。
    if err := session.Query(`INSERT INTO ks.tb (cn1, cn2, cn3) VALUES (?, ?, ?)`,
        "v11", "v12", "v13").Exec(); err != nil {
        log.Fatal(err)
    }

    // 1 行をクエリします。
    var column1, column2 string
    if err := session.Query(`SELECT cn1, cn2 FROM ks.tb WHERE cn1 = ?`,
        "v11").Consistency(gocql.One).Scan(&column1, &column2); err != nil {
        log.Fatal(err)
    }
    fmt.Println("Row:", column1, column2)

    // 条件に一致するすべての行を反復処理します。
    var column3 string
    iter := session.Query(`SELECT * FROM ks.tb WHERE cn1 = ?`, "v11").Iter()
    for iter.Scan(&column1, &column2, &column3) {
        fmt.Println("Row:", column1, column2, column3)
    }
    if err := iter.Close(); err != nil {
        log.Fatal(err)
    }
}