Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python循环仅在cassandra中插入最后一行_Python_Cassandra - Fatal编程技术网

Python循环仅在cassandra中插入最后一行

Python循环仅在cassandra中插入最后一行,python,cassandra,Python,Cassandra,我键入了一个小的演示循环,以便在Cassandra中插入随机值,但只有最后一条记录被持久化到数据库中。我正在使用datastax及其对象建模库中的cassandra驱动程序。Cassandra版本为3.7,Python版本为3.4。知道我做错了什么吗 #!/usr/bin/env python import datetime import uuid from random import randint, uniform from cassandra.cluster import Cluster

我键入了一个小的演示循环,以便在Cassandra中插入随机值,但只有最后一条记录被持久化到数据库中。我正在使用datastax及其对象建模库中的cassandra驱动程序。Cassandra版本为3.7,Python版本为3.4。知道我做错了什么吗

#!/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()

非常感谢

您需要使用save方法

...
row = TestTable(type=type, value=value)
row.save()
...

问题在于键列的定义:

key = columns.UUID(primary_key=True, default=uuid.uuid4())
对于默认值,它将调用
uuid.uuid4
函数一次,并将该结果用作所有未来插入的默认值。因为这是您的主键,所以所有10次写入都将发生在同一主键上

相反,请去掉括号,这样您只需传递对
uuid.uuid4
的引用,而不是调用它:

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

现在,每次创建一行时,都会得到一个新的唯一UUID值,因此在Cassandra中会有一个新行。

谢谢,但它总是失败。奇怪的是,如果我把这两行写了两次,也只存储了一条记录。