2017-07-27 78 views
0

所以我運行下面的查詢沒有問題:qpython.sync()返回一個QProjection,而不是查詢的數據

print(self.data_source.connections['history'].sync(
      '{[x;y;z]select from trade where date within(x;y), sym in z}', 
      numpy.datetime64('2014-04-14', 'D'), 
      numpy.datetime64('2017-08-14', 'D'), 
      NumpyUtil.parse_symbols(['instr81', 'instr61', 'instr26']) 
     )) 

這裏self.data_source.connections[]僅僅是一個與tickerplant,建屋局和RDB的連接和字典NumpyUtil.parse_symbols()是一個小方法,將參數解析爲正確的Numpy類型(已成功測試)。

它產生的是以下並且是涉嫌結果:

[ ('2017-07-20', b'instr26', 31538122, b'instr14', 93.87083689, 77.0477359 , 81) 
('2017-07-20', b'instr26', 31543119, b'instr72', 27.69372507, 80.00145357, 8) 
('2017-07-20', b'instr26', 31678121, b'instr56', 58.24375362, 13.93626591, 36) 
..., 
('2017-07-26', b'instr81', 55344040, b'instr95', 18.75910878, 63.28561637, 98) 
('2017-07-26', b'instr81', 81898858, b'instr78', 34.76710694, 8.32085477, 69) 
('2017-07-26', b'instr81', 81938857, b'instr97', 64.54823106, 0.16524401, 81)] 

完美:)

當我把它變成這種包裝方法我的問題出現了:

def synced_query(self, database, query, parameters): 
    print(self.connections[database].sync(query, parameters)) 

當通過確切相同的參數,它返回的東西,QProjection:

QProjection(QLambda('{[x;y;z]select from trade where date within(x;y),sym in z}'), [numpy.datetime64('2012-06-20'), numpy.datetime64('2017-07-30'), QList([b'instr81', b'instr61', b'instr26'], 
     dtype='|S7')]) 

現在我已經通過我的代碼看(數據在synced_query()方法結束之前通過一些功能通過周圍),但我認爲該數據被分析並正確地傳遞。

當我看文檔q.sync()方法應該只返回從kdb返回的消息,否則引發異常。

所以我基本上想知道爲什麼kdb給了我這樣一個奇怪的答案。有任何想法嗎? :)

回答

1

它看起來像你需要解壓縮在你的Python列表parameters的值。嘗試:

def synced_query(self, database, query, parameters): 
    print(self.connections[database].sync(query, *parameters)) 

(注意*

當你擁有它現在,你是傳遞一個參數(含3項的列表)到您的Q函數,但是你需要傳遞3個參數。 kdb Projection類型會返回,因爲您調用的參數數量少於預期的函數。

+0

感謝隊友,解決了這個問題。我的理解是,我只需要它在參數部分(我已經刪除它只是爲了看看會發生什麼)。不知道'拆包'。謝謝! –

相關問題