Неверная ошибка постоянной STRING в Apache Cassandra (при использовании Python) - PullRequest
1 голос
/ 22 марта 2019

Я новичок в Apache Cassandra (использую Python 3) и пытаюсь создать таблицу на основе CSV-файла. Вот как файл выглядит так: https://i.stack.imgur.com/aYRS1.jpg (извините, но у меня недостаточно очков репутации, чтобы разместить изображение здесь)

Сначала я создаю таблицу

query1 = "CREATE TABLE IF NOT EXISTS table1(artist text, title text, \
            length text, sessionId text, itemInSession text, PRIMARY KEY (sessionId, title, artist))"     

session.execute(query1)

А потом я пытаюсь прочитать файл и вставить нужные данные в таблицу:

file = 'event_datafile_new.csv'

with open(file, encoding = 'utf8') as f:
    csvreader = csv.reader(f)
    next(csvreader) # skip header
    for line in csvreader:
        query = "INSERT INTO table1(artist, title, length, sessionId, itemInSession)"
        query = query + "VALUES(%s, %s, %s, %s, %s)"
        session.execute(query, (line[0], line[9], line[5], line[8], line[3]))

Однако я получаю следующую ошибку:

---> 13         session.execute(query, (line[0], line[9], line[5], line[8], line[3]))

/opt/conda/lib/python3.6/site-packages/cassandra/cluster.cpython-36m-x86_64-linux-gnu.so in cassandra.cluster.Session.execute (cassandra/cluster.c:38536)()

/opt/conda/lib/python3.6/site-packages/cassandra/cluster.cpython-36m-x86_64-linux-gnu.so in cassandra.cluster.ResponseFuture.result (cassandra/cluster.c:80834)()

InvalidRequest: Error from server: code=2200 [Invalid query] message="Invalid STRING constant (288.9922) for "length" of type float"

Даже когда я попытался изменить формат "length" на float - и с% s на% f в операторе INSERT - это не сработало. Кто-нибудь знает в чем может быть проблема? Большое спасибо! :)

1 Ответ

4 голосов
/ 21 апреля 2019

Всякий раз, когда вы читаете из файла с помощью csvreader: «Каждая строка, считанная из файла csv, возвращается в виде списка строк. Автоматическое преобразование типа данных не выполняется, если не указана опция формата QUOTE_NONNUMERIC» из: https://docs.python.org/3/library/csv.html

с таблицей, определенной с такими типами, как:

"CREATE TABLE IF NOT EXISTS table1(artist text, title text, \
            length double, sessionId int, itemInSession int, PRIMARY KEY (sessionId, title, artist))"

Если вы приведете свои значения к правильному типу, это должно работать.Я попробовал это, и это сработало.

session.execute(query, (line[0], line[9], float(line[5]), int(line[8]), int(line[3])))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...