使用 pymssql 库 - 即使没有任何可用值,查询也会返回未知值?

Using pymssql library - Query returning unknown values even though there isn't any value available?

我是 python 和所有网络开发方面的新手。所以请对我放轻松:)。

下面有一段代码 ->

import pymssql

tupleA = [(1,a), (2,b), (3,c), (4,d), (5,e)]

con = pymssql.connect('server', 'username', 'pass', 'db')
cur = con.cursor()

onlyNumber = [x[0] for x in tupleA]
onlyLetter = [x[1] for x in tupleA]

querystring = """
    select COUNT(hl.id), h.number_id from h
    left join hl on hl.h_id = h.id
    left join l on l.id = hl.l_id
    where h.number_id in (%s) and l.letter_id in (%s)
    GROUP by h.number_id
    """ % (','.join(map(str, onlyNumber)), ','.join(map(str, onlyLetter)))

cur.execute(querystring)

numberOfHl = []
number = []

for row in cur:
    numberOfHl.append(row[0])
    number.append(row[1])

setThree = zip(numberOfHl, number)

print setThree

con.close()

以上代码返回未知值,尤其是 numberOfHl 即 [(11,1),(9,2), (5,3),(12,4),(10,5)] 因为我知道什么时候我 运行 在 SQL 中查询 returns 没有值。

我在这里做错了什么?我的查询是否需要更改并正确处理空值?通过添加 .join 我是在创建那些未知值吗?

如有任何帮助,我们将不胜感激。再次抱歉,我缺乏编程知识。

我不完全确定发生了什么,但你做的有点不对。
您应该首先准备带有占位符的查询字符串:

querystring = """
    select COUNT(hl.id), h.number_id from h
    left join hl on hl.h_id = h.id
    left join l on l.id = hl.l_id
    where h.number_id in (%s) and l.letter_id in (%s)
    GROUP by h.number_id
    """ % (','.join(len(onlyNumber)*['%s']), ','.join(len(onlyLetter)*['%s']))

结果:

>>> print(querystring)

    select COUNT(hl.id), h.number_id from h
    left join hl on hl.h_id = h.id
    left join l on l.id = hl.l_id
    where h.number_id in (%s,%s,%s,%s,%s) and l.letter_id in (%s,%s,%s,%s,%s)
    GROUP by h.number_id

然后你有了占位符,你可以将值作为第二个参数传递给 .execute(),如下所示:

 cur.execute(querystring,tuple(onlyNumber + onlyLetter))