我使用sql server
在pyodbc
表上运行明确的计数。当我在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
答案 0 :(得分:1)
参数替换不能用于指定列(或表)名称,只能用于指定列值。您正在执行基本上
的查询select count(distinct('A')) from table
并返回1
,因为所有行的文字值'A'
都相同,因此只有一个不同的值。
要指定列名称,您需要使用动态SQL,例如,
sql = "select count(distinct([{}])) from table".format(col)
cursor.execute(sql)