如何在Cassandra中插入不带空值的列

2024-10-01 17:27:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用Python和DataStax驱动程序(Python->;Cassandra)在Cassandra数据库中存储一些tweet。在

一切都很好,但有些事情我无法理解。 如何插入没有空值的行?在

例如

CREATE TABLE tweets (

id_tweet text PRIMARY KEY,
texttweet text,
hashtag text,
url text,
)

如果我想插入一个没有url值的行,它是可以工作的,但是在Cassandra中,我会在url列中看到“null”。在

我检查一下这个文件:

http://datastax.github.io/python-driver/getting_started.html#passing-parameters-to-cql-queries

所以我尝试了两种不同的方法:

首先,我创建一个完整的字符串,然后执行它。在

^{pr2}$


我在execute函数中发送参数。在

requete2 = "insert into Tweets(id_tweet,texttweet,hashtag,url) values ('%s','%s','%s','%s')"
session.execute(requete2,(id_tweet,id_texttweet,hashtag,url))

问题是,如果我在tweet中没有URL或Hashtag,这两种不同的方法都会给我空值。在

像我在很多教程中看到的那样,如果一行是空的,是否可能看不到它?在

enter image description here

谢谢。在


Tags: 方法textgtid数据库urlexecute驱动程序
1条回答
网友
1楼 · 发布于 2024-10-01 17:27:50

如果您使用的是cassandra2.2或更高版本,这是可以做到的。在cassandra2.2中引入了“UNSET”的概念。这允许您使用相同的语句来插入行,即使您不想提供某些值,也可以使用以下方法:

from cassandra.query import UNSET_VALUE
ps = session.prepare("insert into tweets(id_tweet,texttweet,hashtag,url) values (?,?,?,?)")
session.execute(ps, ("id", "hello world!", UNSET_VALUE, UNSET_VALUE));

这将向cassandra表明,您不希望将这些值作为null插入,而是应该将它们全部删除,这样就不会将“null”值(内部这些值是逻辑删除符)插入到cassandra中。在

在您这边,我认为您需要执行一些预处理逻辑来将任何传入的None值转换为UNSET_VALUE。2.2版本之前的解决方案是根据缺少哪些列来调整查询,即如果hashtag和url是None,那么insert into tweets(id_tweet,texttweet) values (?,?)。在

在检索端,技术上应该可以区分null值和未设置值(我将对此进行研究),但我不认为python驱动程序中存在这样的机制。如果协议中有可能,我会开一张罚单,但是驱动程序中没有这个功能。编辑:cassandra似乎不区分显式设置为null的值(在内部标记为逻辑删除符)和返回数据时从未设置的值。在

您可以在this blog post中阅读python驱动程序中的“UNSET”和其他2.2特性。在

相关问题 更多 >

    热门问题