1

CherryPy で実行されている Web アプリケーションでcqlengine CQL 3 オブジェクト マッパーをフックしようとしています。ドキュメントはクエリについて非常に明確ですが、 cassandraデータベースの既存のテーブル (および既存のキースペース) に対してクエリを実行する方法をまだ知りません。たとえば、タイトル、評価、年フィールドを含むこのテーブル映画が既にあります。CQLクエリを作りたい

SELECT * FROM Movies

との接続を確立した後、クエリを続行するにはどうすればよいですか

from cqlengine import connection
connection.setup(['127.0.0.1:9160'])

これKEYSPACEを「TEST1」と呼びます。

4

3 に答える 3

6

アビループ・サーカー

次の場所にあるすべてのドキュメントを読むことを強くお勧めします。

現在のオブジェクト マッパーのドキュメント

従来の CQLEngine ドキュメント

インストール:pip install cassandra-driver

そして、 CQLEngineの作成者であるrustyrazorblade によるこのサンプル プロジェクトを見てください。

サンプル プロジェクト - ミート ボット

CQLEngine は DataStax Cassandra ドライバーにマージされていることに注意してください。

公式の Python Cassandra ドライバー ドキュメント

あなたは次のようなことをしたいと思うでしょう:

CQLEngine <= 0.21.0:

from cqlengine.connection import setup


setup(['127.0.0.1'], 'keyspace_name', retry_connect=True)

それでもキースペースを作成する必要がある場合:

from cqlengine.management import create_keyspace


create_keyspace(
    'keyspace_name',
    replication_factor=1,
    strategy_class='SimpleStrategy'
)

Cassandra データ モデルをセットアップする

同じ .py または models.py でこれを行うことができます。

import datetime
import uuid

from cqlengine import columns, Model


class YourModel(Model):

    __key_space__ = 'keyspace_name'  # Not Required
    __table_name__ = 'columnfamily_name'  # Not Required

    some_int = columns.Integer(
        primary_key=True,
        partition_key=True
    )
    time = columns.TimeUUID(
        primary_key=True,
        clustering_order='DESC',
        default=uuid.uuid1,
    )
    some_uuid = columns.UUID(primary_key=True, default=uuid.uuid4)
    created = columns.DateTime(default=datetime.datetime.utcnow)
    some_text = columns.Text(required=True)

    def __str__(self):
        return self.some_text

    def to_dict(self):
        data = {
            'text': self.some_text,
            'created': self.created,
            'some_int': self.some_int,
        }

        return data

Cassandra ColumnFamilies を同期する

from cqlengine.management import sync_table

from .models import YourModel


sync_table(YourModel)

上記のすべてを考慮すると、多くの例で概説されているように、すべての接続と同期をまとめることができます。たとえば、これが私たちのプロジェクトの connection.py であるとします。

from cqlengine.connection import setup
from cqlengine.management import sync_table

from .models import YourTable


def cass_connect():
    setup(['127.0.0.1'], 'keyspace_name', retry_connect=True)
    sync_table(YourTable)

モデルとデータを実際に使用する

from __future__ import print_function

from .connection import cass_connect
from .models import YourTable


def add_data():
    cass_connect()
    YourTable.create(
        some_int=5,
        some_text='Test0'
    )

    YourTable.create(
        some_int=6,
        some_text='Test1'
    )

    YourTable.create(
        some_int=5,
        some_text='Test2'
    )


def query_data():
    cass_connect()
    query = YourTable.objects.filter(some_int=5)
    # This will output each YourTable entry where some_int = 5
    for item in query:
        print(item)

必要に応じて、さらに説明を求めてください。

于 2015-04-30T18:36:07.197 に答える
1

これを実現する最も簡単な方法は、既存の cql テーブルのスキーマを反映するモデル クラスを作成し、それらに対してクエリを実行することです。

于 2014-03-04T14:54:22.013 に答える
1

cqlengine は、主に Cassandra のオブジェクト マッパーです。既存のテーブルのオブジェクトを作成するために、既存のデータベースに問い合わせることはありません。むしろ、通常は逆方向 (つまり、python クラスからテーブルを作成する) で使用することを意図しています。cqlengine を使用して既存のテーブルにクエリを実行する場合は、既存のテーブルに正確に対応する Python モデルを作成する必要があります。

たとえば、現在の Movies テーブルに id、title、および release_date の 3 つの列がある場合、これらの 3 つの列を持つ cqlengine モデルを作成する必要があります。さらに、クラスのtable_name属性がデータベースのテーブル名と正確に同じであることを確認する必要があります。

from cqlengine import columns, Model

class Movie(Model):
    __table_name__ = "movies"
    id = columns.UUID(primary_key=True)
    title = columns.Text()
    release_date = columns.Date()

重要なことは、モデルが既存のテーブルを正確に反映していることを確認することです。わずかな違いがある場合はsync_table(MyModel)、モデルに一致するようにテーブルを更新するために使用できる場合があります。

于 2015-03-09T04:12:49.367 に答える