Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQ-q.upsert和q.set追加到八字显示的kdb数据库_Python_Python 3.x_Kdb_Pyq - Fatal编程技术网

Python PyQ-q.upsert和q.set追加到八字显示的kdb数据库

Python PyQ-q.upsert和q.set追加到八字显示的kdb数据库,python,python-3.x,kdb,pyq,Python,Python 3.x,Kdb,Pyq,当我在pyq中运行以下代码时 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 m

当我在pyq中运行以下代码时

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\u name
添加到同一个表中,也就是说,它当前正在将每个
market\u 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

在循环中执行的操作相当于以下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
命令在文件
alpha
中保存一个1行表(回想一下,在q表中是一个字典列表),然后
upsert
命令追加一行,该行与保存的行相同,最后
get
读取生成的2行表

您可能希望在循环外部初始化表,在循环中运行一系列upsert,并在循环后显示结果

请注意,您可以如下方式初始化表:

>>> q.set(':alpha', q('!', ["Name","Bid","Ask","Time"], ()).flip)
k('`:alpha')
>>> q.get(':alpha').show()
Name Bid Ask Time
-----------------
最后,如果您的目标是保存提要,那么在消息到达后立即将其写入磁盘通常不是一个好主意。大多数提要处理程序在内存中收集一天的市场数据,并在一天结束时将其保存在HDB中