Python 中的 Tarantool - 如何调用 auto_increment 函数
Tarantool in Python - how to call auto_increment function
我需要使用 python 客户端在 Tarantool 1.6 中调用 auto_increment 函数。
我试过没有成功:
database = tarantool.connect("localhost", 3301)
s = database.space("customer")
s.call('auto_increment','foo')
有人可以阐明如何在 python 中使用 auto_increment 插入新记录,其中 'foo' 作为字段吗?
我包含错误消息,我尝试了几种在 Python 中使用 auto_increment 的方法,但都没有成功。
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/nameko/containers.py", line 388, in _run_worker
result = method(*worker_ctx.args, **worker_ctx.kwargs)
File "./service.py", line 25, in create
self.server.call('box.auto_increment', (0, 'foo'))
File "/usr/local/lib/python2.7/dist-packages/tarantool/connection.py", line 373, in call
response = self._send_request(request)
File "/usr/local/lib/python2.7/dist-packages/tarantool/connection.py", line 341, in _send_request
return self._send_request_wo_reconnect(request)
File "/usr/local/lib/python2.7/dist-packages/tarantool/connection.py", line 261, in _send_request_wo_reconnect
response = Response(self, self._read_response())
File "/usr/local/lib/python2.7/dist-packages/tarantool/response.py", line 87, in __init__
raise DatabaseError(self._return_code, self._return_message)
DatabaseError: (48, 'Unknown request type 10')
您只能 auto_increment 主键。无法自动递增元组中的其他字段。
看这里:https://tarantool.org/en/doc/1.6/book/box/box_space.html#box-space-auto-increment
首先,你应该使用tarantool 1.7+
而不是1.6
。根据您的设置,您应该使用操作系统的包管理器安装更新版本的 Tarantool,或者使用相应的 docker 图像,即:
$ docker run --rm -p 3301:3301 -t -i tarantool/tarantool:1.7
运行 tarantool 控制台中的以下代码:
box.cfg{ listen=3301 }
customer = box.schema.space.create('customer', {
if_not_exists=true,
temporary=true
})
customer:create_index('primary', {parts = {1, 'unsigned' }})
现在,运行 python 并执行以下命令:
$ python
>> import tarantool
>> server = tarantool.connect("localhost", 3301)
>> space = server.space("customer")
>> space.call("box.space.customer:auto_increment", [['alpha']])
- [1, 'alpha']
>> space.call("box.space.customer:auto_increment", [['bravo']])
- [2, 'bravo']
注意 space.call()
.
参数中的二维数组
自 1.7 版 auto_increment()
已弃用,拥有自动递增索引的正确方法是使用 sequences
。
重新启动您的 tarantool 并在 tarantool 控制台中执行以下 lua 代码:
box.cfg{ listen=3301 }
customer = box.schema.space.create('customer', {
if_not_exists=true,
temporary=true
})
box.schema.sequence.create('S', { min=1 })
customer:create_index('primary', {
parts = {1, 'unsigned' },
sequence = 'S'
})
现在,运行 python 并执行以下命令:
$ python
>> import tarantool
>> server = tarantool.connect("localhost", 3301)
>> space = server.space("customer")
>> space.insert((None, "alpha"))
- [1, 'alpha']
>> space.insert((None, "bravo"))
- [2, 'bravo']
您可以阅读有关序列的更多信息 here。
我需要使用 python 客户端在 Tarantool 1.6 中调用 auto_increment 函数。
我试过没有成功:
database = tarantool.connect("localhost", 3301)
s = database.space("customer")
s.call('auto_increment','foo')
有人可以阐明如何在 python 中使用 auto_increment 插入新记录,其中 'foo' 作为字段吗?
我包含错误消息,我尝试了几种在 Python 中使用 auto_increment 的方法,但都没有成功。
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/nameko/containers.py", line 388, in _run_worker
result = method(*worker_ctx.args, **worker_ctx.kwargs)
File "./service.py", line 25, in create
self.server.call('box.auto_increment', (0, 'foo'))
File "/usr/local/lib/python2.7/dist-packages/tarantool/connection.py", line 373, in call
response = self._send_request(request)
File "/usr/local/lib/python2.7/dist-packages/tarantool/connection.py", line 341, in _send_request
return self._send_request_wo_reconnect(request)
File "/usr/local/lib/python2.7/dist-packages/tarantool/connection.py", line 261, in _send_request_wo_reconnect
response = Response(self, self._read_response())
File "/usr/local/lib/python2.7/dist-packages/tarantool/response.py", line 87, in __init__
raise DatabaseError(self._return_code, self._return_message)
DatabaseError: (48, 'Unknown request type 10')
您只能 auto_increment 主键。无法自动递增元组中的其他字段。
看这里:https://tarantool.org/en/doc/1.6/book/box/box_space.html#box-space-auto-increment
首先,你应该使用tarantool 1.7+
而不是1.6
。根据您的设置,您应该使用操作系统的包管理器安装更新版本的 Tarantool,或者使用相应的 docker 图像,即:
$ docker run --rm -p 3301:3301 -t -i tarantool/tarantool:1.7
运行 tarantool 控制台中的以下代码:
box.cfg{ listen=3301 }
customer = box.schema.space.create('customer', {
if_not_exists=true,
temporary=true
})
customer:create_index('primary', {parts = {1, 'unsigned' }})
现在,运行 python 并执行以下命令:
$ python
>> import tarantool
>> server = tarantool.connect("localhost", 3301)
>> space = server.space("customer")
>> space.call("box.space.customer:auto_increment", [['alpha']])
- [1, 'alpha']
>> space.call("box.space.customer:auto_increment", [['bravo']])
- [2, 'bravo']
注意 space.call()
.
自 1.7 版 auto_increment()
已弃用,拥有自动递增索引的正确方法是使用 sequences
。
重新启动您的 tarantool 并在 tarantool 控制台中执行以下 lua 代码:
box.cfg{ listen=3301 }
customer = box.schema.space.create('customer', {
if_not_exists=true,
temporary=true
})
box.schema.sequence.create('S', { min=1 })
customer:create_index('primary', {
parts = {1, 'unsigned' },
sequence = 'S'
})
现在,运行 python 并执行以下命令:
$ python
>> import tarantool
>> server = tarantool.connect("localhost", 3301)
>> space = server.space("customer")
>> space.insert((None, "alpha"))
- [1, 'alpha']
>> space.insert((None, "bravo"))
- [2, 'bravo']
您可以阅读有关序列的更多信息 here。