如何在python中检查sql是否返回非类型数据

如何在python中检查sql是否返回非类型数据,python,mysql,Python,Mysql,我正在用python运行一个sql,它返回多个记录(大约数百万条),在这两者之间的某个地方,我得到了一个NonType的数据,这给我带来了如下问题:TypeError:不支持的+操作数类型:'NoneType'和'str'。我的sql是: 从表1中选择col1、col2、col3、col4、col5、col6、col7,其中…. 这个sql生成多个记录,我想找出哪个记录/列有NoneType数据。我该怎么做呢?每当数据库中的单元格包含空值时,mysql适配器都会返回None。如果您想检查记录的列

我正在用python运行一个sql,它返回多个记录(大约数百万条),在这两者之间的某个地方,我得到了一个
NonType
的数据,这给我带来了如下问题:
TypeError:不支持的+操作数类型:'NoneType'和'str'
。我的sql是:

从表1中选择col1、col2、col3、col4、col5、col6、col7,其中….


这个sql生成多个记录,我想找出哪个记录/列有
NoneType
数据。我该怎么做呢?

每当数据库中的单元格包含空值时,mysql适配器都会返回None。如果您想检查记录的列中是否没有,您可以使用

if foo is None:
    do_something()

如果要在Python级别上解决此问题,可以迭代结果并使用来检测行中的任何
None
值:

for result in cursor.fetchall():
    if any(field is None for field in result):
        print(result)
        break  # break once we meet a row with None value
但是,为什么不在数据库级别解决它呢?例如,查找任何列具有空值的所有行:

select 
    col1,col2,col3,col4,col5,col6,col7 
from 
    table1 
where
    (col1 IS NULL or col2 IS NULL or ...)

我知道这是一个老问题,但作为文档,这里有一个例子

None
替换为空字符串
“”

对于包含空值的sqlite数据库,我遇到了类似的问题

non_null = lambda x: "" if x is None else x
list = []
for row in cursor.execute("SELECT * FROM Table"):
    # replace None          
    ls = map(non_null,row)

    # create a new tuple because tuples are read-only
    row1 = tuple(ls)
    list.append(row1)

 print(list)