从Cassandra数据库复制行,然后使用Python插入它

时间:2018-02-01 13:22:44

标签: python cassandra datastax datastax-python-driver

我正在为Apache Cassandra使用插件DataStax Python驱动程序。

我想从数据库中读取100行,然后在更改一个值后再将它们插入数据库。我不想错过以前的记录。

我知道如何获取行:

rows = session.execute('SELECT * FROM columnfamily LIMIT 100;')
for myrecord in rows:
    print(myrecord.timestamp)

我知道如何在数据库中插入新行:

stmt = session.prepare('''
       INSERT INTO columnfamily (rowkey, qualifier, info, act_date, log_time)
       VALUES (, ?, ?, ?, ?)
      IF NOT EXISTS
      ''')
results = session.execute(stmt, [arg1, arg2, ...])

我的问题是:

  1. 我不知道如何连续更改一个值。
  2. 我不知道如何在不使用CQL的情况下将行插入数据库。我的专栏家庭有超过150列,在查询中写下他们所有的名字似乎不是一个好主意。
  3. 总结: 有没有办法获取行,从每个行修改一个值,然后将这些行插入数据库而不仅使用CQL?

1 个答案:

答案 0 :(得分:0)

首先,您只需要从Cassandra中选择所需的列 - 传输数据的速度会更快。您需要包含要更改的主键+列的所有列。

获取数据后,您可以使用UPDATE command仅更新必要的列(文档中的示例):

UPDATE cycling.cyclist_name
   SET comments ='='Rides hard, gets along with others, a real winner'
   WHERE id = fb372533-eb95-4bb4-8685-6ef61e994caa

您还可以使用预准备语句使其更具效果......

但要小心 - UPDATE& CQL中的INSERT实际上是UPSERT,因此如果您更改属于主键的列,那么它将创建新的条目......