2017-07-26 47 views
0

我想從MSSQL數據庫拉單值回,代碼如下:從pypyodbc數據庫查詢返回一個字符串

import pandas as pd 
import pypyodbc 
query = 'SELECT TOP(1) value FROM [dbo].[table]' 
connection = pypyodbc.connect(...) 
df = pd.read_sql_query(query, connection) 

但這返回一個數據幀的對象,有沒有一種方法,而不是隻是返回一個單一的字符串值,可能沒有熊貓。重點是速度。通常連接/查詢有更快的方法嗎?

+1

在你的問題有幾件事情我不清楚。 1)沒有「WHERE」子句 - 你不關心要選擇哪一行嗎? 2)爲什麼速度很重要?看起來你想在循環中使用這種方法 - 對嗎?你能解釋一下你想達到什麼嗎? – MaxU

+0

對不起,沒有簡潔的地方,我不關心SQL語法只是連接。是的,它將在while循環中用於根據算法不斷獲取新值。 –

+0

在這種情況下,我建議您提供有關算法的更多詳細信息,併發佈一個小的可重複數據集(CSV/TEXT格式)和您想要的數據集。很可能有一種方法可以在__vectorized__ Pandas/Numpy/SciPy/SKLearn方式中實現您的算法。在這種情況下,您不需要循環遍歷數據 - 您將讀取所有數據(或適合內存的塊)並處理整個數據集。 – MaxU

回答

1

考慮在vectorized Pandas/NumPy/SciPy/SKLearn實現你的算法如果處理速度對你很重要的話。

使用矢量化方法通常意味着使用內部函數來處理矢量和矩陣,而不是標量,並且用C,C-Python等(優化)而不是編寫循環來實現。

如果你的算法無法矢量你仍然可以加快你的算法 - 讀取所有數據要處理在一個循環做的一次,而不是:

query = 'SELECT value FROM [dbo].[table]' # <-- NOTE: i have intentionally removed `TOP(1)` 
connection = pypyodbc.connect(...) 
df = pd.read_sql_query(query, connection) 

# process your data (from the DataFrame) here... 
+0

感謝和好點,我沒有想到在分析之前檢索數據。現在看起來很明顯... –