2017-12-09 10 views
1

내가 pyq에서 다음 코드를 실행 ...PyQ - q.upsert 및 벌어져 KDB 데이터베이스에 추가 q.set

from bittrex.bittrex import Bittrex, API_V2_0 
import time, json 
from pyq import q, K 

get_bittrex = Bittrex(None, None) 
starttime = time.time() 

market_result = get_bittrex.get_market_summaries()['result'] 

while True: 
    for res in market_result: 
     market_name = res['MarketName'] 
     ask = str(res['Ask']) 
     bid = str(res['Bid']) 
     last = str(res['Last']) 
     timeStamp = str(res['TimeStamp']) 
     if market_name in ['USDT-BTC', 'USDT-ETH', 'USDT-LTC']: 
      mkt = {"Name": market_name,"Bid": bid,"Ask": ask,"Time":timeStamp} 
      q.set(':alpha', [mkt]) 
      q.upsert(':alpha', mkt) 
      q.get(':alpha').show() 

    time.sleep(10.0) 

는 콘솔에 10 초마다 반환 ...

Name  Bid   Ask   Time 
-------------------------------------------------------------- 
USDT-BTC 15475.00000001 15530.99999999 2017-12-09T02:46:52.547 
USDT-BTC 15475.00000001 15530.99999999 2017-12-09T02:46:52.547 
Name  Bid   Ask  Time 
------------------------------------------------------ 
USDT-ETH 454.00000001 454.9999 2017-12-09T02:46:52.017 
USDT-ETH 454.00000001 454.9999 2017-12-09T02:46:52.017 
Name  Bid   Ask   Time 
---------------------------------------------------------- 
USDT-LTC 133.76999998 133.98999999 2017-12-09T02:46:49.703 
USDT-LTC 133.76999998 133.98999999 2017-12-09T02:46:49.703 
Name  Bid   Ask   Time 
-------------------------------------------------------------- 
USDT-BTC 15475.00000001 15530.99999999 2017-12-09T02:46:52.547 
USDT-BTC 15475.00000001 15530.99999999 2017-12-09T02:46:52.547 
Name  Bid   Ask  Time 
------------------------------------------------------ 
USDT-ETH 454.00000001 454.9999 2017-12-09T02:46:52.017 
USDT-ETH 454.00000001 454.9999 2017-12-09T02:46:52.017 
Name  Bid   Ask   Time 
---------------------------------------------------------- 
USDT-LTC 133.76999998 133.98999999 2017-12-09T02:46:49.703 
USDT-LTC 133.76999998 133.98999999 2017-12-09T02:46:49.703 

왜 각 줄을 2 배 인쇄합니까? 또한이를 수정하여 각각 market_name을 동일한 테이블에 추가 할 수 있습니다. 즉, 기존 테이블에 추가하는 대신 자신의 테이블에 각 market_name을 현재 인쇄하고 있습니다.

이상적인 출력

Name  Bid   Ask   Time 
-------------------------------------------------------------- 
USDT-BTC 15475.00000001 15530.99999999 2017-12-09T02:46:52.547 
USDT-ETH 454.00000001 454.9999 2017-12-09T02:46:52.017 
USDT-LTC 133.76999998 133.98999999 2017-12-09T02:46:49.703 

감사합니다 ... 다음과 같이하고 싶습니다. 당신은 루프에서 무엇을

답변

2

는 다음 Q 코드에 해당 :

q)`:alpha set enlist`a`b!1 2 
q)`:alpha upsert`a`b!1 2 
q)show get`:alpha 
a b 
--- 
1 2 
1 2 

여기에 놀라운 일이 아무것도 없다. set 명령은 파일 에 1 행 테이블 (qa 테이블에 사전 목록 있음)을 저장하고 upsert 명령은 저장된 것과 동일한 행을 추가하고 마지막으로 get은 결과 2 행을 읽습니다 탁자.

아마도 루프 밖에서 테이블을 초기화하고 루프에서 일련의 업서 트를 실행하고 루프 이후에 결과를 표시하는 것이 좋습니다. 이 같은 테이블을 초기화 할 수 있습니다

참고 : 목표는 피드를 저장하는 경우

>>> q.set(':alpha', q('!', ["Name","Bid","Ask","Time"],()).flip) 
k('`:alpha') 
>>> q.get(':alpha').show() 
Name Bid Ask Time 
----------------- 

마지막으로, 그것은 곧 도착하는대로 디스크에 각 메시지를 작성하는 것이 좋습니다 거의 없다 . 대부분의 피드 처리기는 하루 동안 시장 데이터를 모아서 HDB로 저장합니다.

+0

감사합니다. @Alexander. 그게 해결 됐어! – marrowgari