这是我得到的错误,我已经提到了我在第一节中用于创建表的代码。我知道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]))
1条答案
按热度按时间wj8zmpe11#
所以我建议使用预准备语句。预准备语句执行速度更快,而且更容易使你的列和类型正确。
为了让它正常工作,我稍微重新排列了一下代码:
然后,我使用自己的
event_datafile_new.csv
运行脚本,如下所示:这样就成功了,我可以通过cqlsh对该行执行
SELECT
:专业提示:我建议不要在应用程序代码内部运行
CREATE
和其他DDL语句。如果你在这个网站上搜索Cassandra中模式不一致的问题,你几乎总是会发现,无论是谁遇到了这个问题,他们都是从代码中创建表的。手动创建表或通过cqlsh批量创建表是“快乐之路”。