@@ -40,46 +40,60 @@ Tarantool поддерживает три типа полей: ``STR``, ``NUM``
4040Для бинарных данных следует использовать тип ``bytes ``
4141(в этом случае приведение типов не производится).
4242
43- Для автоматического приведения типов необходимо передать типы полей в параметре ``field_types ``::
43+ Типы данных Tarantool соответствуют следующим типам Python:
44+ • ``RAW `` - ``bytes ``
45+ • ``STR `` - ``unicode `` (``str `` for Python 3.x)
46+ • ``NUM `` - ``int ``
47+ • ``NUM64 `` - ``int `` or ``long `` (``int `` for Python 3.x)
4448
45- >>> demo = connection.space(0, field_types=(int, unicode))
46- >>> demo.insert((0, u'this is unicode string'))
47- >>> demo.select(0)
48- [(0, u'this is unicode string')]
49-
50- Как видно из примера, в аргументе ``field_types `` передается кортеж типов.
51- Исходные "сырые" поля будут приводиться к этим типам.
52-
53- В Tarantool кортеж может содержать произвольное количество полей.
54-
55- Если полей в кортеже больше, чем перечислено типов в ``field_types ``,
56- то последний тип из ``field_types `` применяется ко всем оставшимся полям кортежа.
57-
58- Пример::
59-
60- >>> demo = connection.space(0, field_types=(int, unicode))
61- >>> demo.insert((0, u'I am the Alpha (Α) and Omega (Ω)', b'AAAA', b'BBBB', b'CCCC', b'DDDD'))
49+ Для автоматического приведения типов необходимо объявить схему:
50+ >>> import tarantool
51+ >>> schema = {
52+ 0: { # Space description
53+ 'name': 'users', # Space name
54+ 'default_type': tarantool.STR, # Type that used to decode fields that are not listed below
55+ 'fields': {
56+ 0: ('user_id', tarantool.NUM), # (field name, field type)
57+ 1: ('num64field', tarantool.NUM64),
58+ 2: ('strfield', tarantool.STR),
59+ #2: { 'name': 'strfield', 'type': tarantool.STR }, # Alternative syntax
60+ #2: tarantool.STR # Alternative syntax
61+ },
62+ 'indexes': {
63+ 0: ('pk', [0]), # (name, [field_no])
64+ #0: { 'name': 'pk', 'fields': [0]}, # Alternative syntax
65+ #0: [0], # Alternative syntax
66+ }
67+ }
68+ }
69+ >>> connection = tarantool.connect(host = ' localhost' , port = 33013 , schema = schema)
70+ >>> demo = connection.space(' users' )
71+ >>> demo.insert((0 , 12 , u ' this is unicode string' ))
6272 >>> demo.select(0 )
63- [(0, u'I am the Α and Ω' , u'AAAA', u'BBBB', u'CCCC', u'DDDD ')]
73+ [(0, 12 , u'this is unicode string ')]
6474
65- Как видно из примера, все значения были преобразованы в unicode-строки.
66-
67- Чтобы запретить такое неявное преобразование, достаточно в кортеже типов ``field_types ``
68- последним указать тип ``bytes ``::
69-
70- >>> demo = connection.space(0, field_types=(int, unicode, bytes))
71- >>> demo.insert((0, u'I am the Alpha (Α) and Omega (Ω)', b'AAAA', b'BBBB', b'CCCC', b'DDDD'))
72- >>> demo.select(0)
73- [(0, u'I am the Α and Ω', 'AAAA', 'BBBB', 'CCCC', 'DDDD')]
75+ Как видно из примера, все значения были преобразованы в Python-типы в соответствии со схемой.
7476
77+ Кортеж Tarantool может содержать произвольное количество полей.
78+ Если какие-то поля не объявлены в схеме, то ``default_type `` будет использован для конвертации.
7579
7680Поля с "сырыми" байтами следует использовать, если приложение работает с
7781двоичными данными (например, изображения или python-объекты, сохраненные с помощью ``picke ``).
7882
83+ Возможно также указать тип для CALL запросов:
84+
85+ >>> ...
86+ # Copy schema decription from 'users' space
87+ >>> connection.call(" box.select" , ' 0' , ' 0' , 0L , space_name = ' users' );
88+ [(0, 12, u'this is unicode string')]
89+ # Provide schema description explicitly
90+ >>> field_defs = [(' numfield' , tarantool.NUM ), (' num64field' , tarantool.NUM )]
91+ >>> connection.call(" box.select" , ' 0' , ' 1' , 184L , field_defs = field_defs, default_type = tarantool.STR );
92+ [(0, 12, u'this is unicode string')]
7993
8094.. note ::
8195
82- Python 2.6 adds :class: `bytes ` as a synonym for the :class: `str ` type, and it also supports the ``b'' `` notation .
96+ Python 2.6 добавляет синоним :class: `bytes ` к типу :class: `str ` (также поддерживается синтаксис ``b'' ``) .
8397
8498
8599.. note :: Для преобразования между ``bytes`` и ``unicode`` всегда используется **utf-8**
@@ -250,16 +264,7 @@ Tarantool поддерживает следующие операции обно
250264.. rubric :: Запрос с явным указанием типов полей
251265
252266Tarantool не имеет строгой схемы и поля кортежей являются просто байтовыми массивами.
253- Можно указать типа полей непосредственно в
254- методе :meth: `Space.select() <tarantool.space.Space.select> `
255- при помощи ``field_types `` keyword argument::
256-
257- >>> world.select(3800, field_types=(bytes, str, str, str, bytes))
258- [('\xd8\x0e\x00\x00', 'USA', 'Texas', 'Dallas', '\xe4"\x12\x00')]
259-
260- Как видно из примера, значение ``3800 `` возвращается
261- в виде 4-байтного массива (строки) вместо целого значения.
262-
267+ Можно указать типа полей непосредственно в параметре ``schema `` для ```Connection ``
263268
264269Вызов хранимых функций
265270----------------------
0 commit comments