【PYTHON】【DB】使用pymssql查询表,如何判断查询结果是否为空

总有那些知识点,错了一万遍也不带记住的。

 

事情是这样的。我需要使用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]  

#...

 

问题解决

 

 

 

你可能感兴趣的:(一万遍也记不住,数据库,python)