如何使用Python cassandra-driver查询Cassandra特定UUID数据
没问题,要针对特定entity_id查询其实超简单,只需要给你的CQL语句加个WHERE过滤条件就行。我给你调整好脚本,还有一些实用的细节说明:
针对单个entity_id的查询脚本
from cassandra.cluster import Cluster from cassandra.util import UUID # 用于将字符串转换为Cassandra识别的UUID类型 cluster = Cluster() session = cluster.connect('thingsboard') # 替换成你需要查询的目标entity_id target_entity_id = UUID('5ee30bf0-2e8b-11e8-a810-c3c1a78797ed') # 使用参数化查询过滤特定entity_id,这是driver推荐的安全写法 rows = session.execute( "SELECT * FROM ts_kv_latest_cf WHERE entity_id = %s", (target_entity_id,) ) # 遍历输出结果 for row in rows: print(row)
一些实用的扩展说明
- 参数化查询的好处:用
%s作为占位符,再传入参数元组,既能避免SQL注入风险,又能让driver自动处理UUID这类特殊类型的转换,比直接拼接字符串靠谱多了。 - 同时过滤entity_type:如果你的场景里需要限定设备类型(比如只查
DEVICE),可以把查询条件优化成符合表主键结构的写法,性能会更好:rows = session.execute( "SELECT * FROM ts_kv_latest_cf WHERE entity_type = %s AND entity_id = %s", ('DEVICE', target_entity_id,) ) - 查询多个entity_id:如果需要一次性查多个ID,可以用
IN条件:target_ids = [ UUID('5ee30bf0-2e8b-11e8-a810-c3c1a78797ed'), UUID('477b5630-2e8a-11e8-a810-c3c1a78797ed') ] rows = session.execute( "SELECT * FROM ts_kv_latest_cf WHERE entity_id IN %s", (target_ids,) )
内容的提问来源于stack exchange,提问作者arture
相关产品推荐
相关产品推荐

