总有那些知识点,错了一万遍也不带记住的。
事情是这样的。我需要使用pymssql去表中查询一个值。某些情况下,查询的结果为空,因此我需要先判断是否为空,非空的话再取出我需要的值,否则就会报错。
import pymssql
import logging
import traceback
# logger 的setup省略了
server = 'XXX'
user = 'XXX'
password = 'XXX'
database = 'XXX'
try:
conn = pymssql.connect(server, user, password, database)
cusor = conn.cursor()
cusor.execute(sql)
if cursor is not None: # 注意这里。单纯判断cursor是否为None是不够的
row = cursor.fetchone()
what_i_want = row[0] # 当查询结果为空时,这里会报错
except Exception as e:
msg = str(e)
logger.error('error happened in qureying database. error msg is [' + msg + ']. SQL is [' + sql + ']',
exc_info=True)
logger.error(traceback.format_exc())
当查询结果集为空时,cursor是不为None的。但是cursor.fetchone()为None。
另外在row = cursor.fetchone()之前,cursor.rowcount为0。但查询资料得知,它只有在所有条目都被fetch了之后才有意义。的确,当我执行了row = cursor.fetchone()之后,这个值就变成了1。
所以修改code:
# ...
if cursor is not None: # 注意这里。单纯判断cursor是否为None是不够的
row = cursor.fetchone()
if row is not None:
what_i_want = row[0]
#...
问题解决