Cassandra Python выполняет несколько операторов из строки с использованием диска Python?

Я хочу выполнить несколько операторов cql (2 или более) с помощью драйвера python .

Я пробую такой простой код, но это приводит к ошибке, если запрос содержит более одного оператора. Я не хочу разделять операторы или форматировать их (на отдельные операторы). Я просто хочу выполнить весь CQL.

Как это сделать с драйвером python для Cassandra - возможно ли?

я использую ; как разделение заявления.

      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:\Users\Cezary Wagner\PycharmProjects\medptr-v2\sandbox\cassandra_scheme\04_execute_multiple_statements.py", line 39, in <module>
    main()
  File "C:\Users\Cezary Wagner\PycharmProjects\medptr-v2\sandbox\cassandra_scheme\04_execute_multiple_statements.py", line 34, in main
    result_set = session.execute(query)
  File "cassandra\cluster.py", line 2618, in cassandra.cluster.Session.execute
  File "cassandra\cluster.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]...)">

1 ответ

Каждое утверждение должно быть отдельным. Просто разделите текст на ;используя свой код Python, и выполнять их отдельно. Кроме того, примите во внимание, что программные модификации схемы, подобные вашей, потенциально опасны - вы можете получить так называемое несогласие схемы, которое потребует исправить это путем последовательного перезапуска кластера.

Другие вопросы по тегам