使用Cassandra Python驱动编程建表时遭遇SyntaxException错误
问题分析与解决
错误原因
触发cassandra.protocol.SyntaxException的核心是生成的CQL语句存在语法错误:
- 直接将
ColName.keys()和ColName.values()传入字符串格式化,这两个方法返回的是字典视图对象,转成字符串后会变成dict_keys([...])这类格式,Cassandra的CQL解析器无法识别这种格式,从而抛出语法错误。 - 原语句的括号与逗号位置错误,
PRIMARY KEY定义应该放在表结构的括号内部,而非外部。
修正代码
正确的做法是先把字典中的键值对拼接成符合CQL规范的列定义,再构建完整的建表语句:
cluster = Cluster(cloud=cloud_config, auth_provider=auth_provider) session = cluster.connect('firstkey') ColName = { "qty_dot_url": "int", "qty_hyphen_url": "int", "qty_underline_url": "int", "qty_slash_url": "int" } # 拼接每个列的定义,格式为"列名 数据类型",用逗号分隔 column_defs = ", ".join([f"{col} {dtype}" for col, dtype in ColName.items()]) # 构建合法的CREATE TABLE语句 create_table_query = f"CREATE TABLE master_table ({column_defs}, PRIMARY KEY(qty_dot_url))" session.execute(create_table_query)
关键修正说明
- 用
ColName.items()遍历字典的键值对,逐个生成正确的列定义字符串,再通过,连接,保证列格式完全符合CQL要求。 - 将
PRIMARY KEY的定义移到表结构的括号内部,遵循Cassandra建表语句的语法规则。
内容的提问来源于stack exchange,提问作者MUHAMMAD ASAD MAJEED
相关产品推荐
相关产品推荐

