使用 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))
我是 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))