2016-08-15 61 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