Вы в основном вставляете в пространство кортеж, а не сам объект table
, поэтому, когда вы делаете:
obj = box.space.somespace:get{1}
, вы получаете обратно свой кортеж, а не table
. Тем не менее, если вы хотите получить доступ к полям table
с помощью ключей, вам просто нужно проиндексировать этот объект следующим образом:
table = obj[2]
print(table.entry_offset)
Как только вы привыкнете к нему, проверьте tarantool space format Функция с функциями tomap
/ frommap
. Вот пример основного c, который может вам помочь:
box.cfg{}
box.schema.create_space('test', {if_not_exists = true})
box.space.test:create_index('pk', {unique = true, if_not_exists = true, parts = {1, 'unsigned'}})
box.space.test:format({
{ name = 'id', 'unsigned' },
{ name = 'entry_offset', 'unsigned' },
{ name = 'entry_size', 'unsigned' },
{ name = 'created_time', 'unsigned' },
{ name = 'additional_meta', 'map' },
})
json = require('json')
obj_json = [[{
"entry_offset" : 180587225765,
"entry_size" : 54003,
"created_time" : 1577500878,
"additional_meta" : {
"geohash64" : 5637765837143565,
"mime_type" : "image/jpg"
}}]]
obj = json.decode(obj_json)
obj.id = 1
tuple = box.space.test:frommap(obj)
box.space.test:insert(tuple)
result = box.space.test:get({1}):tomap()
print(result.additional_meta.mime_type)
Или, для более продвинутого подхода к сериализации, взгляните на avro-schema с его flatten
/ unflatten
методов. Примеры есть в README