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])
请注意语句只需要准备一次,因为它包括到集群节点的往返行程以执行查询的解析
我正在尝试使用 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])
请注意语句只需要准备一次,因为它包括到集群节点的往返行程以执行查询的解析