Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pandas read_sql将空值导入为0_Sql_Sql Server_Python 3.x_Pandas_Pyodbc - Fatal编程技术网

pandas read_sql将空值导入为0

pandas read_sql将空值导入为0,sql,sql-server,python-3.x,pandas,pyodbc,Sql,Sql Server,Python 3.x,Pandas,Pyodbc,编辑: 显然,我的连接PYODBC正在将空值读取为0。我想在更高的层次上纠正这个问题,因为我将阅读大量的SQL文件。我在文档中找不到任何可以防止这种情况的东西。有什么建议吗 我正在以字符串形式导入SQL文件/查询,然后使用pd.read\u SQL查询我的数据库。在SQLServer中,我可以在空值之间进行计算,这会导致空值,但是在Python中,这会使我的脚本出错 在SQL Server中运行的查询: SELECT PurchaseOrderID, POTotalQtyVouched, New

编辑: 显然,我的连接PYODBC正在将空值读取为0。我想在更高的层次上纠正这个问题,因为我将阅读大量的SQL文件。我在文档中找不到任何可以防止这种情况的东西。有什么建议吗

我正在以字符串形式导入SQL文件/查询,然后使用pd.read\u SQL查询我的数据库。在SQLServer中,我可以在空值之间进行计算,这会导致空值,但是在Python中,这会使我的脚本出错

在SQL Server中运行的查询:

SELECT PurchaseOrderID, POTotalQtyVouched, NewColumn = PurchaseOrderID/POTotalQtyVouched FROM #POQtys;
PurchaseOrderID    POTotalQtyVouched   NewColumn
NULL               NULL                NULL
007004             8                   875.5
008017             21                  381.761904761905
008478             NULL                NULL
以下是运行SQL Server中的查询后所需的输出:

SELECT PurchaseOrderID, POTotalQtyVouched, NewColumn = PurchaseOrderID/POTotalQtyVouched FROM #POQtys;
PurchaseOrderID    POTotalQtyVouched   NewColumn
NULL               NULL                NULL
007004             8                   875.5
008017             21                  381.761904761905
008478             NULL                NULL
在Python中运行查询:

query = '''
...
[Other code defining #POQTYs]
...
SELECT PurchaseOrderID, POTotalQtyVouched, NewColumn = PurchaseOrderID/POTotalQtyVouched FROM #POQtys;

'''
conn = pyodbc.connect('Driver={ODBC Driver 17 for SQL Server};'
                      'Server=MSS-SL-SQL;'
                      'Database=TRACE DB;'
                      'Trusted_Connection=yes;')

df = pd.read_sql(query, conn)
Python中的错误:

query = '''
...
[Other code defining #POQTYs]
...
SELECT PurchaseOrderID, POTotalQtyVouched, NewColumn = PurchaseOrderID/POTotalQtyVouched FROM #POQtys;

'''
conn = pyodbc.connect('Driver={ODBC Driver 17 for SQL Server};'
                      'Server=MSS-SL-SQL;'
                      'Database=TRACE DB;'
                      'Trusted_Connection=yes;')

df = pd.read_sql(query, conn)
DataError:'22012','[22012][Microsoft][ODBC驱动程序17 for SQL Server][SQL Server]被零除时遇到错误。8134 SQLFetch'


看起来您的连接会自动将null转换为0,所以当值为null时,只需使用大小写表达式即可防止计算。@DaleBurrell,感谢您为我指明了正确的路径。这将起作用,但由于我将为许多SQL文件做很多这方面的工作,我想找到另一种方法来做这件事。你是否检查过我的建议实际上是这样的?我越想它,就越觉得它不可能,因为计算发生在SQL Server内部,与连接无关。事实上,我认为查询的数据肯定不同。是的,Python中的查询:SELECT PurchaseOrderID,POTotalQtyVouched FROM POQtys返回相同的表,但带有0而不是NULL。我认为这是熊猫的问题。检查此项,尤其是强制浮点参数。