卡桑德拉不良的表命名规范设计

2024-04-27 01:10:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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表命名有什么问题。这太令人困惑和沮丧了。在


Tags: textjsoninputexecutedatetimedatetimesession
2条回答

最后用一种难看的方法解决了这个问题。在

query = "INSERT INTO " + a
session.execute(query + """ (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"])))

不能参数化键空间或表名,只能参数化准备好的语句上的参数。在这里如何执行它并不是一个准备好的语句,但是您要执行的参数与如何放置圆括号相混淆。将第一个参数作为元组的一部分放入a,因此我认为它可以:

session.execute("""INSERT INTO "%s" (date, time, input, predicted_result) VALUES(%s, %s, %s, %s);""",
                        a,
                        str(dateTime.date()),
                        str(dateTime.time()),
                        json.dumps(json.loads(input_json)["0"]),
                        json.dumps(json.loads(predicted_result_json)["0"])))

此外,您也可以自己构建字符串:

^{pr2}$

通常,为了安全起见,最好使用硬编码的表名。在

另外,您是否在动态创建表?这最终会导致问题。如果Cassandra有数千个表,并且在进行更改时加载模式变得越来越慢(使用STCS),那么Cassandra就不能很好地工作。在

相关问题 更多 >