2017-12-09 5 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 
----------------- 

最後に、すぐにそれが到着すると、ディスクへの各メッセージを書き込むことがめったに良いアイデアではありません。ほとんどのフィードハンドラは、1日分の市場データをメモリに集め、HDBに保存します。

+0

ありがとう、アレクサンダー。それはそれを解決しました! – marrowgari

関連する問題