检查从SQL数据库获取的数据中的空值

时间:2018-03-02 10:45:47

标签: python-3.x numpy pyodbc

我想将数据存储在从数据库中获取的numpy数组中。我想确保没有空值(None)转到numpy数组(无论如何都会抛出错误)。我尝试过以下方式,但它不起作用。出于某种原因,NullValueCheck()总是返回true我怎么能知道空值并对它做些什么呢?

import numpy as np
import pyodbc as odbc

cnxn = odbc.connect(conn_string)
cursor = cnxn.cursor()
cursor.execute("""SELECT ID, BuildingID, Title FROM Something"""")

rows = cursor.fetchall()
cnxn.close()

ID = [i[0] for i in rows]
buildingID = [i[1] for i in rows]
title = [i[2] for i in rows]

def NullValueCheck(rows):
     if (any(elem is None for elem in rows[0])):
         return True
     else:
         return False

if NullValueCheck(rows):
    ID_array = np.fromiter(ID, dtype= np.int32)

修改 事实证明,我不必编写所有代码。我可以使用我想从numpy数组中实现的pandas数据帧来实现相同的效果。

import pandas as pd
import pyodbc as odbc

cnxn = odbc.connect(conn_string)
df = pd.io.sql.read_sql("""SELECT ID, BuildingID, Title FROM Something""", cnxn)

1 个答案:

答案 0 :(得分:1)

我发现在源SQL中最容易解决这个问题。 COALESCE在这里很有用:

df = pd.io.sql.read_sql("""SELECT ID, COALESCE(BuildingID, 0) AS BuildingID, Title FROM Something""", cnxn)

如果0的值为NULL,则返回BuildingID。不同的SQL数据库具有特定NULL检查的功能(例如,SQL Server中为ISNULL,MySQL中为IFNULL),但COALESCE是最交叉数据库兼容的。