Cassandra Python使用Python驱动器从字符串执行多条语句



我想使用python驱动程序执行多个cql语句(2个或更多(。

我尝试了这样简单的代码,但若查询包含多个语句,就会导致错误。我不想拆分语句或将其格式化(为单个语句(。我只想执行整个CQL。

如何为Cassandra使用python驱动程序-这可能吗?

我使用;作为语句拆分。

from cassandra.cluster import Cluster

def main():
cluster = Cluster(contact_points=['cassandra-1.', 'cassandra-2.', 'cassandra-3.', 'cassandra-4.'])
session = cluster.connect()
session.execute('drop keyspace if exists test')
session.execute('''
create keyspace test
with durable_writes = true
and replication = {
'class' : 'SimpleStrategy',
'replication_factor' : 3
};    
''')
session.set_keyspace('test')
# two statements or more and there is error
# how to execute all in one call?
query = '''
create table x1 (
name text,

primary key ((name))
);
create table x2 (
name text,

primary key ((name))
);
'''
result_set = session.execute(query)
print(result_set)

if __name__ == '__main__':
main()

它产生这样的错误:

Traceback (most recent call last):
File "C:UsersCezary WagnerPycharmProjectsmedptr-v2sandboxcassandra_scheme4_execute_multiple_statements.py", line 39, in <module>
main()
File "C:UsersCezary WagnerPycharmProjectsmedptr-v2sandboxcassandra_scheme4_execute_multiple_statements.py", line 34, in main
result_set = session.execute(query)
File "cassandracluster.py", line 2618, in cassandra.cluster.Session.execute
File "cassandracluster.py", line 4894, in cassandra.cluster.ResponseFuture.result
cassandra.protocol.SyntaxException: <Error from server: code=2000 [Syntax error in CQL query] message="line 7:4 mismatched input 'create' expecting EOF (... ((name))    );    [create]...)">

每个语句都应该是单独的。只需使用Python代码在;上拆分文本,然后分别执行它们。此外,请考虑到像您这样的编程模式修改具有潜在的危险性——您可能会遇到所谓的模式不一致,需要通过滚动重新启动集群来解决。

最新更新