pyodbc参数化sql结果计数明显不正确

时间:2017-10-20 13:01:48

标签: sql-server parameters pyodbc

我使用sql serverpyodbc表上运行明确的计数。当我在sql server本地运行查询时,我会得到不同的结果。

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 

如果我运行一个简单的选择计数(*),那么结果与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 个答案:

答案 0 :(得分:1)

参数替换不能用于指定列(或表)名称,只能用于指定列。您正在执行基本上

的查询
select count(distinct('A')) from table

并返回1,因为所有行的文字值'A'都相同,因此只有一个不同的值。

要指定列名称,您需要使用动态SQL,例如,

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