如何使用Python访问Docker容器中的ScyllaDB并插入数据?
解决ScyllaDB Docker容器数据插入连接失败的问题
首先,你的问题根源有两个:一是使用了过时的Thrift协议端口(9160),二是依赖的cql库已经被淘汰——现在ScyllaDB(和兼容的Cassandra生态)都推荐使用原生CQL协议(端口9042)来连接操作。
具体解决步骤:
1. 确保Docker容器开放CQL端口
ScyllaDB默认用9042作为CQL连接端口,你需要确认启动容器时已经映射了这个端口。如果之前启动容器时没做端口映射,需要重启容器配置:
# 先停止并移除旧容器(按需操作) docker stop <你的scylla容器名> docker rm <你的scylla容器名> # 重新启动容器,映射9042端口到本地 docker run -d --name scylla -p 9042:9042 scylladb/scylla
如果已经启动容器且不想删除,可以先检查端口映射状态,确认9042端口已对外暴露。
2. 替换为现代Python驱动
cql库基于Thrift协议,如今已停止维护,你需要安装官方推荐的cassandra-driver(Scylla完全兼容该驱动):
pip install cassandra-driver
3. 编写正确的数据插入代码
用新驱动重写你的插入逻辑,示例代码如下:
from cassandra.cluster import Cluster # 连接到本地的ScyllaDB容器 cluster = Cluster(['localhost'], port=9042) session = cluster.connect('logs') # 关联你已创建的keyspace # 执行插入语句 insert_query = "INSERT INTO event_attend (event_id, event_type, event_user_id) VALUES (131, 'Party', 3156);" session.execute(insert_query) print("数据插入成功!") # 关闭连接 cluster.shutdown()
为什么旧代码会失败?
- 9160是Thrift协议的端口,ScyllaDB默认已经禁用了Thrift服务,即便映射这个端口也无法建立连接。
cql库依赖Thrift协议,属于被废弃的工具,不再适配现代ScyllaDB版本。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

