Python cassandra 更新语句错误'输入不匹配 're' 期待 K_WHERE '?

Python cassandra update statement error 'mismatched input 're' expecting K_WHERE '?

我正在尝试使用 python 客户端更新 cassandra 数据库,如下所示。

def update_content(session, id, content)
  update_statement = """
    UPDATE mytable SET content='{}' WHERE id={}
  """
  session.execute(update_statement.format(content, id))

它适用于大多数情况,但在某些情况下,内容是形式为

的字符串
content = "Content Message -'[re]...)"

导致错误调用应用程序异常:<来自服务器的错误:code=2000 [CQL 查询中的语法错误] message="line 2:61 不匹配的输入 're' 期待K_WHERE (

我不确定为什么会这样? cassandra 是否试图以某种方式将字符串解释为正则表达式。

我试过打印更新前的数据,感觉还不错

"UPDATE mytable SET content='Content Message -'[re]...)' WHERE id=2"

为避免此类问题,您应该停止使用 .format 创建 CQL 语句,并开始使用 prepared statements,它允许您:

  • 避免出现未转义特殊字符的问题,例如 '
  • 允许进行基本类型检查
  • 获得更好的性能,因为查询将被解析一次,并且只会通过网络发送数据
  • 您将获得令牌感知查询路由,这意味着查询将直接发送到保存分区数据的副本之一

您的代码需要修改如下:

prep_statement = session.prepare('UPDATE mytable SET content=? WHERE id=?')

def update_content(session, id, content):
  session.execute(prep_statement, [content, id])

请注意语句只需要准备一次,因为它包括到集群节点的往返行程以执行查询的解析