在Apache Cassandra中无法将值转换为浮点型

rslzwgfq  于 2023-03-02  发布在  Cassandra
关注(0)|答案(1)|浏览(155)

这是我得到的错误,我已经提到了我在第一节中用于创建表的代码。我知道csvreader以字符串格式获取数据,但类型转换不起作用。

create_table1 = """
        CREATE TABLE IF NOT EXISTS song_info_by_session (
        session_id int, 
        item_in_session int, 
        artist_name varchar,
        length float, 
        song text,  
        PRIMARY KEY(session_id, item_in_session))
"""

try:
    session.execute(create_table1)
except Exception as e:
    print(e)
file = 'event_datafile_new.csv'

with open(file, encoding = 'utf8') as f:
    csvreader = csv.reader(f)
    next(csvreader) # skip header
    for line in csvreader:
        insert_table1 = """INSERT INTO song_info_by_session  
                    (session_id, 
                    item_in_session,
                    artist_name, 
                    length, 
                    song) 
                """
        insert_table1 = insert_table1 + "VALUES (%s, %s, %s, %s, %s)"
        session.execute(insert_table1, (int(line[8]), int(line[3]), line[0], float(line[5]), line[9]))

wj8zmpe1

wj8zmpe11#

所以我建议使用预准备语句。预准备语句执行速度更快,而且更容易使你的列和类型正确。
为了让它正常工作,我稍微重新排列了一下代码:

file = 'event_datafile_new.csv'

insert_table1 = """INSERT INTO song_info_by_session  
    (session_id, 
    item_in_session,
    artist_name, 
    length, 
    song) 
    VALUES (?,?,?,?,?)
"""

pStatement = session.prepare(insert_table1);

with open(file, encoding = 'utf8') as f:
    csvreader = csv.reader(f)

    for line in csvreader:

        session.execute(pStatement,(int(line[0]),int(line[1]),line[2],float(line[3]),line[4]))

然后,我使用自己的event_datafile_new.csv运行脚本,如下所示:

101,912,Rush,20.33,2112

这样就成功了,我可以通过cqlsh对该行执行SELECT

> SELECT * FROM song_info_by_session WHERE session_id=101;

 session_id | item_in_session | artist_name | length | song
------------+-----------------+-------------+--------+------
        101 |             912 |        Rush |  20.33 | 2112

(1 rows)

专业提示:我建议不要在应用程序代码内部运行CREATE和其他DDL语句。如果你在这个网站上搜索Cassandra中模式不一致的问题,你几乎总是会发现,无论是谁遇到了这个问题,他们都是从代码中创建表的。手动创建表或通过cqlsh批量创建表是“快乐之路”。

相关问题