|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我希望在python爬虫项目中使用Cassandra数据库,当我使用如下代码时,生成的log文件显示连接被主机拒绝,但同时又能成功将数据库中的表名读取出来
from cassandra.cluster import Cluster
class CassandraDatabase():
def __init__(self, keyspace, table, host=['localhost'], port=9042):
self.keyspace = keyspace
self.host = host
self.table = table
self.port = port
self.connect()
def __del__(self,):
self.cluster.shutdown()
def connect(self,):
self.cluster = Cluster(contact_points=self.host, port=self.port, protocol_version=4)
self.session = self.cluster.connect()
keyspace_name = 'mykeyspacetest'
# 获取集群的元数据
metadata = self.session.cluster.metadata
# 通过keyspace名称获取具体的keyspace元数据
keyspace_metadata = metadata.keyspaces[keyspace_name]
# 获取该keyspace中的所有表名
table_names = keyspace_metadata.tables.keys()
# 打印表名
print("Keyspace '{}' 中的表名:".format(keyspace_name))
for table_name in table_names:
print(table_name)
self.create_keyspace()
self.session.set_keyspace(self.keyspace)
def close(self,):
self.cluster.shutdown()
log文件中的报错信息如下:
2024-10-17 20:25:57 [cassandra.cluster] WARNING: Cluster.__init__ called with contact_points specified, but no load_balancing_policy. In the next major version, this will raise an error; please specify a load-balancing policy. (contact_points = ['localhost'], lbp = None)2024-10-17 20:25:59 [cassandra.cluster] WARNING: [control connection] Error connecting to ::1:9042:Traceback (most recent call last): File "D:\Anaconda\envs\datataiwanpy38\lib\site-packages\cassandra\cluster.py", line 3577, in _reconnect_internal return self._try_connect(host) File "D:\Anaconda\envs\datataiwanpy38\lib\site-packages\cassandra\cluster.py", line 3599, in _try_connect connection = self._cluster.connection_factory(host.endpoint, is_control_connection=True) File "D:\Anaconda\envs\datataiwanpy38\lib\site-packages\cassandra\cluster.py", line 1670, in connection_factory return self.connection_class.factory(endpoint, self.connect_timeout, *args, **kwargs) File "D:\Anaconda\envs\datataiwanpy38\lib\site-packages\cassandra\connection.py", line 846, in factory conn = cls(endpoint, *args, **kwargs) File "D:\Anaconda\envs\datataiwanpy38\lib\site-packages\cassandra\io\asyncorereactor.py", line 353, in __init__ self._connect_socket() File "D:\Anaconda\envs\datataiwanpy38\lib\site-packages\cassandra\connection.py", line 951, in _connect_socket raise socket.error(sockerr.errno, "Tried connecting to %s. Last error: %s" %ConnectionRefusedError: [Errno 10061] Tried connecting to [('::1', 9042, 0, 0)]. Last error: 由于目标计算机积极拒绝,无法连接。
同时,Cassandra数据库端的日志输出有:
INFO [nioEventLoopGroup-2-6] 2024-10-17 20:49:14,872 Message.java:687 - Unexpected exception during request; channel = [id: 0x063be996, L:/127.0.0.1:9042 - R:/127.0.0.1:24261]java.io.IOException: 远程主机强迫关闭了一个现有的连接。
我已经尝试使用:
1. 修改连接方法中的协议版本,改为protocol_version=4
2. 修改localhost为127.0.0.1,怀疑是回访地址为::1的问题
|
|