2017-10-20 141 views
2

我使用pyodbcsql server表上運行不同的計數。當我在本地運行sql server查詢時,我得到了不同的結果。pyodbc parameterised sql result count distinct distinct

columns = ['A','B','C'] 

for col in columns: 
    cursor.execute("select count(distinct(?)) from table",col) 
    print (col) 
    b = cursor.fetchone() 
    distinctcount = b[0] 
    print ('distinctcount %s '% distinctcount) 

輸出給所有列作爲「1」時,實際值應爲151988的所有列。

A 
distinctcount 1 
B 
distinctcount 1 

如果我運行一個簡單的SELECT COUNT(*),那麼結果與結果sql server一致。

for col in columns: 
    cursor.execute("select count(?) from table" , col) 
    print (col) 
    a = cursor.fetchone() 
    rowcount = a[0] 
    print ('rowcount %s '% rowcount) 

結果:

A 
rowcount 151988 
B 
rowcount 151988 

回答

1

參數替換不能用於指定列(或表),僅列。您正在執行一個查詢,基本上是

select count(distinct('A')) from table 

和正在返回1,因爲文字值'A'是所有行一樣的,所以只有一個獨特的價值。

要指定列你需要使用動態SQL,例如,

sql = "select count(distinct([{}])) from table".format(col) 
cursor.execute(sql) 
+0

是有道理的,謝謝! – joshi123