如何在python中检查sql是否返回非类型数据
我正在用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。如果您想检查记录的列
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)