pyodbc数值的问题被标记为“无”而不是NULL或空

时间:2014-02-10 01:32:37

标签: python sql-server ms-access python-3.3 pyodbc

我正在从一组访问数据库中获取数值(在许多其他字符串和数值中)并将它们上传到单个MS SQL Server数据库。

我使用的是32位Python 3.3和相应的pyodbc软件包。

我想知道是否有办法捕获数字字段为空的事实 没有驱动程序的Access数据库返回字符串'None'而不是*。使用的语法如下:

access_con = pyodbc.connect(connection_string)
access_cur = access_con.cursor()
access_SQL = 'SELECT * FROM ' + source_table
rows =  access_cur.execute(access_SQL).fetchall()
for row in rows:
    [Statement uploading each row to SQL Server using an INSERT INTO statement]

任何帮助将不胜感激;无论是作为解决方案还是作为传递数据的更直接方式。

*编辑:'无'只是一个字符串,因为我将其转换为一个以将其添加到INSERT INTO语句中。使用row.replace('None','NULL')替换了所有'None'实例,并将其替换为'NULL',ODBC驱动程序将其解释为NULL值。

1 个答案:

答案 0 :(得分:3)

None is a Python object,不是字符串。它相当于SQL Server中的NULL,或Access中的“空”列值。

例如,如果我有一个具有以下定义的Access表:

Table Definition

包含以下值(请注意Number列的第一个值为空):

Table Data

相关的Python代码产生:

...
>>> cursor = connection.cursor()
>>> rows = cursor.execute('select * from Table1').fetchall()
>>> print(rows)
[(None, ), (1, )]

此示例确认空的Access值返回为None

这个PyODBC Documentation很好地解释了ODBC和Python数据类型的映射方式。