gpt4 book ai didi

python - 是什么导致 Cassandra CQL 出现 "no viable alternative at input ' None'"错误

转载 作者:太空狗 更新时间:2023-10-29 18:26:40 25 4
gpt4 key购买 nike

我正在尝试使用新 key 将修改后的文档插入回 Cassandra DB。我很难弄清楚错误消息指向的问题是什么。在寻找其他有类似问题的人时,答案似乎与键有关,在我的例子中, None 只是少数键的值。我该如何解决这个问题?

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)

这是查询和当前的数据:

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'
}

失败并出现以下错误:

cql.apivalues.ProgrammingError: 
Bad Request: line 1:123 no viable alternative at input 'None'

最佳答案

“没有可行的选择”意味着某些键的数据类型与该列族列的架构不匹配,不幸的是它没有在错误消息中明确说明。

在我的例子中,meta 的数据类型是:

map<text,text> 

出于这个原因,None 在插入时被认为是一个错误的值。我通过在插入之前用空字典替换 None 来解决问题:

if current['meta'] is None:
current['meta'] = dict()

CQL 驱动程序可以接受空字典作为映射类型的新值,而 None 是不允许的,即使查询映射列如果为空则返回 None。

返回 None 而不接受 None 感觉不直观,所以后来我决定为 cursor.fetchone() 创建自定义包装器,它返回列映射而不是列列表,并且还检查 MapType、ListType 或 SetType已返回无。如果没有值,它会用空的 dict()、list() 或 set() 替换它们,以避免像我将修改后的数据插入回 Cassandra 时遇到的问题。这似乎工作得很好。

关于python - 是什么导致 Cassandra CQL 出现 "no viable alternative at input ' None'"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14897599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com