Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Python

Примеры на GitHub: sample_db, python

tarantool-python – официальный коннектор Python для Tarantool. Он не входит в состав репозитория Tarantool и должен устанавливаться отдельно.

В этом руководстве показано, как использовать библиотеку tarantool-python для создания Python-скрипта, который подключается к удалённому экземпляру Tarantool, выполняет операции CRUD и вызывает хранимую процедуру. Полная документация по пакету доступна здесь: Клиентская библиотека Python для Tarantool.

Конфигурация тестовой базы данных

Запуск тестового приложения базы данных

Перед созданием и запуском клиентского Python-приложения необходимо запустить приложение sample_db с помощью команды tt start:

$ tt start sample_db

Теперь можно создать клиентское Python-приложение, которое будет выполнять запросы к этой базе данных.

Разработка клиентского приложения

Перед началом работы убедитесь, что на вашем компьютере установлен Python.

Создание приложения

  1. Создайте каталог hello для вашего приложения и перейдите в него:

    $ mkdir hello$ cd hello
  2. Создайте и активируйте виртуальное окружение Python:

    $ python -m venv .venv$ source .venv/bin/activate
  3. Установите модуль tarantool:

    $ pip install tarantool
  4. Внутри каталога hello создайте файл hello.py для кода приложения.

Импорт пакета tarantool

В файле hello.py импортируйте пакет tarantool:

import tarantool# Connect to the databaseconn = tarantool.Connection(host='127.0.0.1',                            port=3301,                            user='sampleuser',                            password='123456')# Insert datatuples = [(1, 'Roxette', 1986),          (2, 'Scorpions', 1965),          (3, 'Ace of Base', 1987),          (4, 'The Beatles', 1960)]print("Inserted tuples:")for tuple in tuples:    response = conn.insert(space_name='bands', values=tuple)    print(response[0])# Select by primary keyresponse = conn.select(space_name='bands', key=1)print('Tuple selected by the primary key value:', response[0])# Select by secondary keyresponse = conn.select(space_name='bands', key='The Beatles', index='band')print('Tuple selected by the secondary key value:', response[0])# Updateresponse = conn.update(space_name='bands',                       key=2,                       op_list=[('=', 'band_name', 'Pink Floyd')])print('Updated tuple:', response[0])# Upsertconn.upsert(space_name='bands',            tuple_value=(5, 'The Rolling Stones', 1962),            op_list=[('=', 'band_name', 'The Doors')])# Replaceresponse = conn.replace(space_name='bands', values=(1, 'Queen', 1970))print('Replaced tuple:', response[0])# Deleteresponse = conn.delete(space_name='bands', key=5)print('Deleted tuple:', response[0])# Callresponse = conn.call('get_bands_older_than', 1966)print('Stored procedure result:', response[0])# Close connectionconn.close()print('Connection is closed')

Подключение к базе данных

Добавьте следующий код:

# Connect to the databaseconn = tarantool.Connection(host='127.0.0.1',                            port=3301,                            user='sampleuser',                            password='123456')

Этот код устанавливает подключение к работающему экземпляру Tarantool от имени пользователя sampleuser. Объект conn можно использовать для выполнения CRUD-запросов и вызова хранимых процедур.

Операции с данными

Вставка данных

Добавьте следующий код, чтобы вставить четыре кортежа в спейс bands:

# Insert datatuples = [(1, 'Roxette', 1986),          (2, 'Scorpions', 1965),          (3, 'Ace of Base', 1987),          (4, 'The Beatles', 1960)]print("Inserted tuples:")for tuple in tuples:    response = conn.insert(space_name='bands', values=tuple)    print(response[0])

Connection.insert() используется для вставки кортежа в спейс.

Запрос данных

Чтобы получить кортеж по заданному значению первичного ключа, используйте Connection.select():

# Select by primary keyresponse = conn.select(space_name='bands', key=1)print('Tuple selected by the primary key value:', response[0])

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

# Select by secondary keyresponse = conn.select(space_name='bands', key='The Beatles', index='band')print('Tuple selected by the secondary key value:', response[0])

Обновление данных

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

# Updateresponse = conn.update(space_name='bands',                       key=2,                       op_list=[('=', 'band_name', 'Pink Floyd')])print('Updated tuple:', response[0])

Connection.upsert() обновляет существующий кортеж или вставляет новый. В примере ниже вставляется новый кортеж:

# Upsertconn.upsert(space_name='bands',            tuple_value=(5, 'The Rolling Stones', 1962),            op_list=[('=', 'band_name', 'The Doors')])

В этом примере Connection.replace() удаляет существующий кортеж и вставляет новый:

# Replaceresponse = conn.replace(space_name='bands', values=(1, 'Queen', 1970))print('Replaced tuple:', response[0])

Удаление данных

Connection.delete() в примере ниже удаляет кортеж, значение первичного ключа которого равно 5:

# Deleteresponse = conn.delete(space_name='bands', key=5)print('Deleted tuple:', response[0])

Вызов хранимых процедур

Для вызова хранимой процедуры используйте Connection.call():

# Callresponse = conn.call('get_bands_older_than', 1966)print('Stored procedure result:', response[0])

Закрытие подключения

Метод Connection.close() можно использовать для закрытия подключения, когда оно больше не нужно:

# Close connectionconn.close()print('Connection is closed')

Запуск клиентского приложения

Чтобы запустить получившееся приложение, передайте имя скрипта команде python:

$ python hello.pyInserted tuples:[1, 'Roxette', 1986][2, 'Scorpions', 1965][3, 'Ace of Base', 1987][4, 'The Beatles', 1960]Tuple selected by the primary key value: [1, 'Roxette', 1986]Tuple selected by the secondary key value: [4, 'The Beatles', 1960]Updated tuple: [2, 'Pink Floyd', 1965]Replaced tuple: [1, 'Queen', 1970]Deleted tuple: [5, 'The Rolling Stones', 1962]Stored procedure result: [[2, 'Pink Floyd', 1965], [4, 'The Beatles', 1960]]Connection is closed

Коннекторы Python от сообщества

Последнее обновление: сентябрь 2023

Также существуют следующие коннекторы Python, разработанные сообществом:

  • asynctnt с поддержкой asyncio.
  • aiotarantool также с поддержкой asyncio, нет активной поддержки.
  • gtarantool с поддержкой gevent, нет активной поддержки.

В таблице ниже приведено сравнение возможностей asynctnt и tarantool-python.

Параметр
Лицензия
Apache License 2.0
BSD-2
Поддерживается
Да
Да
Известные проблемы
Нет
Нет
Документация
Да (github.io)
Тестирование / CI / CD
GitHub Actions
GitHub Actions
Звёзды на GitHub
73
92
Статический анализ
Да (Flake8)
Да (Flake8, Pylint)
Пакетирование
Покрытие кода
Да
Да
Поддержка асинхронного режима
Да, asyncio
Нет
Поддержка пакетной обработки
Нет
Да (через API CRUD)
Перезагрузка схемы
Да (автоматически, см. auto_refetch_schema)
Да (автоматически)
Имена спейсов / индексов
Да
Да
Доступ к полям кортежа по именам
Да
Нет
Да
Да
Да
Нет (issue #163)
Да (в полях MP_BIN)
Да
Да
Да
Да
Да
Да
Да
Да
Да
Нет (issue #30)
Да
Да
Да
Нет
Нет
Нет
Нет
Да
Да
Нет
Да
Прозрачные повторные попытки запросов
Нет
Нет
Прозрачное повторное подключение
Автопереподключение
Да (reconnect_max_attempts, reconnect_delay), проверка работоспособности соединения
Пул соединений
Нет
Да (с обнаружением мастера)
Нет
Нет (issue #22)
Да