【问题标题】:Unable to insert into user defined type in Cassandra无法插入 Cassandra 中的用户定义类型
【发布时间】:2018-09-25 15:54:46
【问题描述】:

我有用户定义的类型和 Cassandra 中的表格:

CREATE TYPE message (
  txt text,
  pub_date text
);


CREATE TABLE user_messages(
    username text,
    messages list<frozen <message>>,
    PRIMARY KEY (username)
);

我正在尝试通过Python代码将数据插入表中:

session.execute('''update user_messages set messages = {txt :'''+ '"'+request.json.get('text') +'"'+''',pub_date:'''+ str(int(time.time())) +'''} where username=''' + username)

但是对于 txt 字段的输入,它无法正常工作:“这是我的新推文”。 错误的控制台输出是:

SyntaxException: <Error from server: code=2000 [Syntax error in CQL query] message="line 1:64 no viable alternative at input ',' (...set messages = {txt :["This is my new twee]t",...)">

如果我将输入 txt 字段设置为更简单的字段,例如:“tweet”,那么错误是

SyntaxException: <Error from server: code=2000 [Syntax error in CQL query] message="line 1:49 no viable alternative at input ',' (...set messages = {txt :["twee]t",...)">

我错过了什么吗? 有没有其他方法可以将数据插入用户定义的数据类型? 我也尝试使用 INSERT 查询,但失败了。所以我尝试使用 UPDATE 命令。请给我一些解决方案。

【问题讨论】:

    标签: python flask cassandra


    【解决方案1】:

    这只是一个语法错误,因为您使用双引号(“这是我的推文”)作为 message->txt 的值。确保插入单引号,例如:

    {txt: 'This is my tweet', pub_date: 'yesterday'}
    

    【讨论】:

    • txt 字段是从请求 JSON 对象中获取的,并以双引号传递。
    • 好像你用+ '"'+插入双引号
    • 有没有办法将数据加载到我上面提到的表格的用户定义类型中?
    • 是的,您需要修复语法错误。您正在插入{txt: "This is my tweet",...,您需要插入:{txt: 'This is my tweet',...
    • 我修改了类似 session.execute('''update user_messages set messages = {txt :'''+ "'"+request.json.get('text') +"'" 的语句+''',pub_date:'''+ "'"+str(int(time.time()))+"'" +'''} where username=''' + "'" + username +"' ") 现在错误是 InvalidRequest: Error from server: code=2200 [Invalid query] message="Invalid user type literal for messages of type list>"
    猜你喜欢
    • 2017-09-23
    • 1970-01-01
    • 2018-01-04
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 2016-03-21
    • 2016-09-01
    相关资源
    最近更新 更多