我正在尝试将运行在CherryPy上的web应用程序与cqlengine CQL 3 object mapper连接起来。尽管documentation对查询非常清楚,但我仍然不知道如何在我的cassandra数据库中的现有表(和现有键空间)上进行查询。例如,我已经有了包含字段Title、rating、Year的电影表格。我想进行CQL查询
SELECT * FROM Movies建立连接后如何继续查询
from cqlengine import connection
connection.setup(['127.0.0.1:9160'])KEYSPACE被称为"TEST1“。
发布于 2015-05-01 02:36:07
Abhiroop Sarkar
我强烈建议您通读所有文档,网址为:
Installation:pip install cassandra-driver
看看这个由CQLEngine的创建者rustyrazorblade创建的示例项目
请记住,CQLEngine已合并到DataStax Cassandra-driver中:
Official Python Cassandra Driver Documentation
你会想要做这样的事情:
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同步您的 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)如有必要,请随时要求进一步澄清。
发布于 2014-03-04 22:54:22
要实现这一点,最直接的方法是创建模型类,这些模型类镜像现有cql表的模式,然后对它们运行查询。
发布于 2015-03-09 12:12:49
cqlengine主要是Cassandra的对象映射器。它不会为了为现有表创建对象而询问现有数据库。相反,它通常用于相反的方向(例如,从python类创建表)。如果要使用cqlengine查询现有表,则需要创建与现有表完全对应的python模型。
例如,如果您的current Movies表有3列: id、title和release_date,则需要创建一个包含这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)来更新表格以匹配您的模型。
https://stackoverflow.com/questions/22098393
复制相似问题