0

我正在为 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 的情况下将行插入数据库。我的 columnfamily 有 150 多个列,在查询中写下它们的所有名称似乎不是一个好主意。

总结一下:有没有办法获取行,从每个行中修改一个值,然后将这些行插入数据库而不只使用 CQL?

4

1 回答 1

0

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

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

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

您还可以使用准备好的语句来提高性能...

但要小心 - CQL 中的UPDATE&INSERT是真正的 UPSERT,所以如果您更改作为主键一部分的列,那么它将创建新条目......

于 2018-02-01T14:29:20.010 回答