Подключение из Python | Tarantool
Документация на русском языке
поддерживается сообществом

Подключение из Python

Перед тем как идти дальше, выполним следующие действия:

  1. Установим библиотеку tarantool. Рекомендуется использовать python3 и pip3.

  2. Запустим Tarantool (локально или в Docker) и обязательно создадим базу данных с тестовыми данными, как показано в предыдущем разделе:

    box.cfg{listen = 3301}
    s = box.schema.space.create('tester')
    s:format({
             {name = 'id', type = 'unsigned'},
             {name = 'band_name', type = 'string'},
             {name = 'year', type = 'unsigned'}
             })
    s:create_index('primary', {
             type = 'hash',
             parts = {'id'}
             })
    s:create_index('secondary', {
             type = 'hash',
             parts = {'band_name'}
             })
    s:insert{1, 'Roxette', 1986}
    s:insert{2, 'Scorpions', 2015}
    s:insert{3, 'Ace of Base', 1993}
    

    Важно

    Не закрывайте окно терминала с запущенным Tarantool – оно пригодится нам позднее.

  3. Чтобы иметь возможность подключаться к Tarantool в качестве администратора, сменим пароль пользователя admin:

    box.schema.user.passwd('pass')
    

Для подключения к серверу достаточно выполнить следующее:

>>> import tarantool
>>> connection = tarantool.connect("localhost", 3301)

Также при необходимости можно указать имя пользователя и пароль:

>>> tarantool.connect("localhost", 3301, user=username, password=password)

По умолчанию используется пользователь guest.

Спейс — это контейнер для кортежей. Чтобы обратиться к спейсу как к именованному объекту, воспользуемся функцией connection.space:

>>> tester = connection.space('tester')

Для вставки нового кортежа в спейс воспользуемся функцией insert:

>>> tester.insert((4, 'ABBA', 1972))
[4, 'ABBA', 1972]

Сначала выберем кортеж по первичному ключу (в нашем примере первичный индекс ––это индекс primary, построенный по полю id в каждом кортеже). Воспользуемся функцией select:

>>> tester.select(4)
[4, 'ABBA', 1972]

Теперь поищем кортежи по вторичному ключу. Для этого нужно указать номер или имя вторичного индекса.

Сначала сделаем запрос по номеру индекса:

>>> tester.select('Scorpions', index=1)
[2, 'Scorpions', 2015]

(Мы указываем index=1, потому что индексы в Tarantool нумеруются с нуля, а в данном случае мы обращаемся к индексу, который создавали вторым.)

Теперь сделаем аналогичный запрос по имени индекса и получим тот же результат:

>>> tester.select('Scorpions', index='secondary')
[2, 'Scorpions', 2015]

А чтобы выбрать все кортежи из спейса, вызовем select без аргументов:

>>> tester.select()

Обновим значение поля с помощью update:

>>> tester.update(4, [('=', 1, 'New group'), ('+', 2, 2)])

Здесь мы обновляем значение поля 1 и увеличиваем значение поля 2 для кортежа с id = 4. Если кортежа с таким id нет, то Tarantool вернет ошибку.

Теперь с помощью функции replace мы полностью заменим кортеж с совпадающим первичным ключом. Если кортежа с указанным первичным ключом не существует, то эта операция ни к чему не приведет.

>>> tester.replace((4, 'New band', 2015))

Также мы можем обновлять данные с помощью функции upsert, которая работает аналогично update, но создает новый кортеж, если старый не был найден.

>>> tester.upsert((4, 'Another band', 2000), [('+', 2, 5)])

Здесь мы увеличиваем на 5 значение поля 2 в кортеже с id = 4, — или же вставляем кортеж (4, "Another band", 2000), если такого нет.

Чтобы удалить кортеж, нужно использовать delete(primary_key):

>>> tester.delete(4)
[4, 'New group', 2012]

Для удаления всех кортежей в спейсе (или всего спейса целиком) нужно воспользоваться функцией call. Мы поговорим о ней подробнее в следующем разделе.

Чтобы удалить все кортежи в спейсе, нужно вызвать функцию space:truncate:

>>> connection.call('box.space.tester:truncate', ())

Чтобы удалить весь спейс, нужно вызвать функцию space:drop. Для выполнения следующей команды необходимо подключиться из-под пользователя admin:

>>> connection.call('box.space.tester:drop', ())

Перейдем в терминал с запущенным Tarantool.

Примечание

О том, как установить удаленное подключение к Tarantool, можно прочитать здесь:

  • как подключиться к Tarantool, запущенному локально
  • как подключиться к Tarantool, запущенному в Docker-контейнере

Напишем простую функцию на Lua:

function sum(a, b)
    return a + b
end

Итак, теперь у нас есть функция, описанная в Tarantool. Чтобы вызвать ее из python, нам нужна функция call:

>>> connection.call('sum', (3, 2))
5

Также мы можем передать на выполнение любой Lua-код. Для этого воспользуемся функцией eval:

>>> connection.eval('return 4 + 5')
9

Чтобы подробнее ознакомиться со всеми доступными Python-коннекторами, посмотрите таблицу сравнения их функций в разделе «Коннекторы».

Нашли ответ на свой вопрос?
Обратная связь