我刚到Cassandra,现在我面临着数据类型问题
每当我试图插入数据作为文本类型,我得到以下错误
[Syntax error in CQL query] message="line 1:103 no viable alternative at input ',' (... filepath) VALUES (0, [P2],...)">
这里我创建了一个名为batch_rows的表,可以看到node_id的类型为text
self.session.execute("""
CREATE TABLE IF NOT EXISTS batch_rows (
local_pid int,
node_id text,
camera_id int,
geolocation int,
filepath int,
PRIMARY KEY (local_pid, node_id)
)
""")
但每当我做插入它给了我上面的错误,这是我的插入声明:
local_pid = i
node_id= 'P2'
camera_id= 1
geolocation= 4
filepath = 3
self.session.execute('INSERT INTO %s (local_pid, node_id, camera_id, geolocation, filepath) VALUES (%s, %s, %s, %s, %s) ' %
(table, local_pid, node_id, camera_id, geolocation, filepath))
事实上我现在有点卡住了,有没有人面对这个?谢谢大家
3条答案
按热度按时间axr492tv1#
使用
%
对值进行类型转换是无效的,因此产生的CQL查询返回语法错误:下面是一个包含位置占位符有效格式的示例代码:
我也赞同@Aaron的建议,即避免以编程方式更改模式,以避免模式不一致。
有关如何执行查询的其他示例,请参阅Cassandra Python驱动程序Getting Started Guide。干杯!
sxpgvts32#
因此,字符串解析CQL语句并将每个值转换为字符串是行不通的。我会构建一个如下所示的预处理语句:
另外,我不会从应用程序代码中执行
CREATE
语句,这会很快导致模式不一致。uplii1fm3#
恐怕你错误地使用了带有位置参数的准备语句。请参阅这里的文档。
如果你试着像下面这样做呢?