2017-12-09 2 views
1

파이썬 클라이언트를 사용하여 Tarantool 1.6에서 auto_increment 함수를 호출해야합니다.Python의 Tarantool - auto_increment 함수 호출 방법

database = tarantool.connect("localhost", 3301) 
s = database.space("customer") 
s.call('auto_increment','foo') 

사람이 파이썬에서 AUTO_INCREMENT를 사용하여 필드와 'foo에'에 새 레코드를 삽입하는 방법을 명확히 수 :

나는 성공없이 시도?

오류 메시지가 포함되어 있습니다. 파이썬에서 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') 
+0

s.call ('auto_increment', ('foo',))가 작동하지 않습니다. –

답변

1

첫째, 당신은 tarantool 1.7+ 대신 1.6 사용해야합니다. 사용자의 설정에 따라, 당신은 당신의 운영 시스템을위한 패키지 관리자를 사용하여 Tarantool의 최신 버전을 설치하거나 해당 고정 표시기 이미지를 사용해야 하나, 즉 :

$ 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 
>> 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()의 인수에 두 dimesional 배열입니다.

버전 1.7 auto_increment()이 권장되지 않으므로 자동 증가 색인을 사용하는 적절한 방법은 sequences을 사용하는 것입니다.

당신의 tarantool를 다시 시작하고 tarantool 콘솔에서 다음 루아 코드를 실행

:

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 
>> import tarantool 
>> server = tarantool.connect("localhost", 3301) 
>> space = server.space("customer") 
>> space.insert((None, "alpha")) 
- [1, 'alpha'] 
>> space.insert((None, "bravo")) 
- [2, 'bravo'] 

당신은 순서 here에 대한 자세한 내용을 읽을 수 있습니다.

0

기본 키에서만 auto_increment를 수행 할 수 있습니다. 터플의 다른 필드를 자동 증가시키는 방법은 없습니다.

는 여기를 참조하십시오 : 모든 https://tarantool.org/en/doc/1.6/book/box/box_space.html#box-space-auto-increment

+0

튜플의 첫 번째 필드 즉, 기본 키만 자동으로 증가시킬 것으로 예상합니다. –

+0

코드 스 니펫으로 개별 답변을 작성했습니다. auto_increment() (더 이상 사용되지 않음)를 사용하고 기본 키가 자동으로 증가하도록 더 적절한'sequences'를 사용합니다. –