【问题标题】:Python cassandra update statement error 'mismatched input 're' expecting K_WHERE '?Python cassandra更新语句错误'输入不匹配're'期待K_WHERE'?
【发布时间】:2021-03-11 03:41:00
【问题描述】:

我正在尝试使用 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]...)"

导致错误异常调用应用程序: p>

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

我尝试在更新前打印数据,看起来不错

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

【问题讨论】:

    标签: python python-3.x cassandra cqlsh


    【解决方案1】:

    为避免此类问题,您应该停止使用.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])
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2021-12-07
      • 2013-11-23
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-10-19
      相关资源
      最近更新 更多