Запросы с помощью cqlengine

Я пытаюсь подключить объект сопоставления CQL 3 cqlengine с моим веб-приложением, работающим на CherryPy. Хотя в документации очень ясно говорится о запросах, я до сих пор не знаю, как выполнять запросы к существующей таблице (и существующему пространству ключей) в моей базе данных cassandra. Например, у меня уже есть эта таблица Фильмы, содержащие поля Название, рейтинг, Год. Я хочу сделать запрос CQL

SELECT * FROM Movies

Как мне продолжить выполнение запроса после установления соединения с

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

KEYSPACE называется "TEST1".

3 ответа

Абхируп Саркар,

Я настоятельно рекомендую вам прочитать всю документацию по адресу:

CQLEngine Документация

И взгляните на этот пример проекта создателя CQLEngine, rustyrazorblade:

Пример проекта - Мясной бот

Имейте в виду, CQLEngine был объединен с драйвером DataStax Cassandra:

Официальная документация Python Cassandra Driver

Вы хотите сделать что-то вроде этого:

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 __unicode__(self):
        return unicode(self.sometext)

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

        return data

Синхронизировать колонку CassandraFamilies

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

Не стесняйтесь, чтобы попросить дополнительные разъяснения, если это необходимо.

Самый простой способ добиться этого - создать классы моделей, которые отражают схему существующих таблиц cql, а затем выполнить запросы к ним.

cqlengine - это прежде всего Object Mapper для Cassandra. Он не опрашивает существующую базу данных для создания объектов для существующих таблиц. Скорее он обычно предназначен для использования в противоположном направлении (то есть создавать таблицы из классов Python). Если вы хотите запросить существующую таблицу с помощью cqlengine, вам нужно будет создать модели Python, которые точно соответствуют вашим существующим таблицам.

Например, если ваша текущая таблица Movies имеет 3 столбца, id, title и release_date, вам необходимо создать модель 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) обновить таблицу в соответствии с вашей моделью.

Другие вопросы по тегам