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

标签 python sql tuples pymssql

我是 Python 和 Web 开发领域的新手。所以请对我宽容点:)。

我下面有一段代码 ->

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 中运行该查询时它不会返回任何值。

我在这里做错了什么?我的查询是否需要更改并正确处理空值?通过添加 .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 - 使用 pymssql 库 - 即使没有任何可用值,查询也会返回未知值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43788722/

相关文章:

javascript - 我如何从 html 表单获取输入并将其添加到 python 脚本中

python - TestCase 类中的 setUpClass、setUpTestData 和 setUp 有什么区别?

PHP AND 子句不显示结果,但 OR 是

python - 比较两个元组的所有元素(使用 all() 功能)

python - 如何从另一个 python 文件导入列表

python - Travis CI Python 导入失败 'requests'

mysql - join with where Vs join SQL 中的关键字

python - 在 SQL 查询中使用 Python 列表获取列名

Python 字符串、列表和元组的行为不同

python - 将元组转换为两部分