让a = "03bb2997_8b7a_4359_800d_7c14e5175bc9"
然后我决定将其作为cassandra的表名。因此,通过使用Python
session.execute("""CREATE TABLE IF NOT EXISTS "%s" (date date, time time, input text, predicted_result text, PRIMARY KEY(date, time));""" % new_modelId)
注意%s之间的双引号,没有它,cql将抱怨SyntaxException: line 1:35 mismatched character '_' expecting '-'
,因为表名不能以数字字符开头
表已成功创建。我通过cqlsh验证了。但是,当我尝试将数据插入下表时:
^{pr2}$InvalidRequest: Error from server: code=2200 [Invalid query] message="unconfigured table '03bb2997_8b7a_4359_800d_7c14e5175bc9'"
我试着用硬编码的表名,它起作用了。在
session.execute("""INSERT INTO "03bb2997_8b7a_4359_800d_7c14e5175bc9" (date, time, input, predicted_result) VALUES(%s, %s, %s, %s);""",
( str(dateTime.date()), str(dateTime.time()),
json.dumps(json.loads(input_json)["0"]), json.dumps(json.loads(predicted_result_json)["0"])))
我不知道Cassandra表命名有什么问题。这太令人困惑和沮丧了。在
最后用一种难看的方法解决了这个问题。在
不能参数化键空间或表名,只能参数化准备好的语句上的参数。在这里如何执行它并不是一个准备好的语句,但是您要执行的参数与如何放置圆括号相混淆。将第一个参数作为元组的一部分放入a,因此我认为它可以:
此外,您也可以自己构建字符串:
^{pr2}$通常,为了安全起见,最好使用硬编码的表名。在
另外,您是否在动态创建表?这最终会导致问题。如果Cassandra有数千个表,并且在进行更改时加载模式变得越来越慢(使用STCS),那么Cassandra就不能很好地工作。在
相关问题 更多 >
编程相关推荐