2016-08-15 29 views
0

我键入了一个小的演示循环,以便在Cassandra中插入随机值,但只有最后一条记录被保存到数据库中。我使用datastax及其对象建模库中的cassandra-driver。 Cassandra版本是3.7和Python 3.4。任何想法我做错了什么?Python循环只在cassandra中插入最后一行

#!/usr/bin/env python 

import datetime 
import uuid 
from random import randint, uniform 
from cassandra.cluster import Cluster 
from cassandra.cqlengine import connection, columns 
from cassandra.cqlengine.management import sync_table 
from cassandra.cqlengine.models import Model 
from cassandra.cqlengine.query import BatchQuery 

class TestTable(Model): 
    _table_name = 'test_table' 
    key = columns.UUID(primary_key=True, default=uuid.uuid4()) 
    type = columns.Integer(index=True) 
    value = columns.Float(required=False) 
    created_time = columns.DateTime(default=datetime.datetime.now()) 


def main(): 
    connection.setup(['127.0.0.1'], 'test', protocol_version = 3) 
    sync_table(TestTable) 

    for _ in range(10): 
     type = randint(1, 3) 
     value = uniform(-10, 10) 
     row = TestTable.create(type=type, value=value) 
     print("Inserted row: ", row.type, row.value) 

    print("Done inserting") 

    q = TestTable.objects.count() 
    print("We have inserted " + str(q) + " rows.") 


if __name__ == "__main__": 
    main() 

非常感谢!

回答

2

的问题是在键列的定义:

key = columns.UUID(primary_key=True, default=uuid.uuid4()) 

对于它会调用一次uuid.uuid4功能,并使用该结果作为默认的缺省值所有未来插入。因为这是你的主键,所有10次写入都会发生在同一个主键上。

相反,删除括号,所以你只是过客参考,uuid.uuid4,而不是调用它:

key = columns.UUID(primary_key=True, default=uuid.uuid4) 

现在每次创建一个行,你会得到一个新的独特的UUID值的时间,因此一卡桑德拉新排。

+0

谢谢,它工作! – user3159821