Próbuję wstawić zmodyfikowany dokument z powrotem do Cassandra DB z nowym kluczem. Mam problem z ustaleniem, na co wskazuje komunikat o błędzie. Szukając innych, którzy mieli podobne problemy, odpowiedzi wydają się być związane z kluczami, a w moim przypadku Brak jest tylko wartością kilku kluczy. Jak rozwiązać ten problem?Co powoduje "brak realnej alternatywy na wejściu" Brak "" z Cassandrą CQL
keys = ','.join(current.keys())
params = [':' + x for x in current.keys()]
values = ','.join(params)
query = "INSERT INTO wiki.pages (%s) Values (%s)" % (keys, values)
query = query.encode('utf-8')
cursor.execute(query, current)
Oto dane dla zapytania i prądu:
INSERT INTO wiki.pages (changed,content,meta,attachment,revision,page,editor)
VALUES (:changed,:content,:meta,:attachment,:revision,:page,:editor)
{
u'changed': '2013-02-15 16:31:49',
u'content': 'Testing',
u'meta': None,
u'attachment': None,
u'revision': 2,
u'page': u'FrontPage',
u'editor': 'Anonymous'
}
ten nie powiedzie się z powodu następującego błędu:
cql.apivalues.ProgrammingError:
Bad Request: line 1:123 no viable alternative at input 'None'
FWIW, "brak realnej alternatywy" jest technicznie błędem analizy, a nie błędem typu. – jbellis
Aby dodać do tego, co powiedział @jbellis, zdarza mi się to zwykle, gdy łączę ciągi znaków w wielu liniach (dla moich przygotowanych instrukcji) i zapominam o zapewnieniu miejsca po obu stronach moich identyfikatorów/słów kluczowych. Na przykład: "WYBIERZ * OD nazwa_plikuWHERE foo =?" Spowoduje "brak realnej alternatywy pod adresem: foo", ponieważ oczekiwano słowa kluczowego "WHERE", a nie identyfikatora. (Byłoby miło, gdyby wskazywało na to, czego się spodziewało). –
FWIW, "nie ma realnej alternatywy" pochodzi z ANTLR, więc jeśli potrzebujesz się zagłębić, chwyć gramatykę ANTLR. – Jus12