簡體   English   中英

如何使用Python訪問Docker容器中的ScyllaDB?

[英]How can I access ScyllaDB in Docker container using Python?

我已經根據官方文檔使用ScyllaDB設置了Docker容器。 我創建了鍵空間和表。 現在,我想向該表中插入一些數據。 我想知道我能做得到嗎? 我找到了例子:

import cql
con = cql.connect('localhost', 9160,  'logs', cql_version='3.0.0')
print ("Connected!")
cursor = con.cursor()
CQLString = "INSERT INTO event_attend (event_id, event_type, event_user_id) VALUES (131, 'Party', 3156);"
cursor.execute(CQLString)

但是我得到如下所示的錯誤。 我找不到任何示例可以說明如何使用Docker來完成。 有任何想法嗎?

No handlers could be found for logger "thrift.transport.TSocket"
Traceback (most recent call last):
  File "scylla_test.py", line 2, in <module>
    con = cql.connect('localhost', 9160,  'logs', cql_version='3.0.0')
  File "/usr/local/lib/python2.7/dist-packages/cql/connection.py", line 143, in connect
    consistency_level=consistency_level, transport=transport)
  File "/usr/local/lib/python2.7/dist-packages/cql/connection.py", line 59, in __init__
    self.establish_connection()
  File "/usr/local/lib/python2.7/dist-packages/cql/thrifteries.py", line 151, in establish_connection
    self.transport.open()
  File "/usr/local/lib/python2.7/dist-packages/thrift/transport/TTransport.py", line 271, in open
    return self.__trans.open()
  File "/usr/local/lib/python2.7/dist-packages/thrift/transport/TSocket.py", line 113, in open
    raise TTransportException(TTransportException.NOT_OPEN, msg)
thrift.transport.TTransport.TTransportException: Could not connect to any of [('::1', 9160, 0, 0), ('127.0.0.1', 9160)]

您能否使用端口9042(默認的CQL端口)進行檢查。 9160是節儉的端口,如今已很少使用。 另外,是否可以確保轉發端口,例如:

docker run --name some-scylla \\ --volume /var/lib/scylla:/var/lib/scylla \\ -p 9042:9042 -p 7000:7000 -p 7001:7001 -p 7199:7199 \\ -p 9160:9160 -p 9180:9180 -p 10000:10000 \\ -d scylladb/scylla --overprovisioned 1

在容器本身外部無法訪問容器的“ localhost”地址。

您可能需要執行以下操作。 首先確保ScyllaDB節點已使用

docker exec -it scylla nodetool status

它應該輸出類似於:

Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  172.17.0.2  153.41 KB  256          100.0%            70a72849-5608-47d5-8c8d-0f1db0f57444  rack1

如果所有節點的狀態均為“關閉”(DN),則可能需要先將它們啟動。

現在,使用顯示的節點地址。 如果您的集群中有多個節點,則這些地址中的任何一個都可以。 如果您的系統中已安裝cqlsh,則可以首先嘗試手動連接它:

cqlsh 172.17.0.2

否則,只需將其放入您的Python腳本中並運行即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM