Python pyodbc数值标记为';无';而不是NULL或空

Python pyodbc数值标记为';无';而不是NULL或空,python,sql-server,ms-access,python-3.3,pyodbc,Python,Sql Server,Ms Access,Python 3.3,Pyodbc,我目前正在从一组access数据库中获取数值(以及许多其他字符串和数值),并将它们上载到单个MS SQL Server数据库 我正在使用32位Python 3.3和相应的pyodbc包 我想知道是否有一种方法可以捕捉数字字段在 在驱动程序不返回字符串“None”的情况下访问数据库*。使用的语法如下所示: access_con = pyodbc.connect(connection_string) access_cur = access_con.cursor() access_SQL = 'SEL

我目前正在从一组access数据库中获取数值(以及许多其他字符串和数值),并将它们上载到单个MS SQL Server数据库

我正在使用32位Python 3.3和相应的pyodbc包

我想知道是否有一种方法可以捕捉数字字段在 在驱动程序不返回字符串“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]
任何帮助都将不胜感激;无论是作为解决方案还是作为更直接的数据传输方式

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

,而不是字符串。它相当于SQL Server中的
NULL
,或Access中的“空”列值

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

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

相关Python代码生成:

...
>>> cursor = connection.cursor()
>>> rows = cursor.execute('select * from Table1').fetchall()
>>> print(rows)
[(None, ), (1, )]
此示例确认返回的空访问值为
None


这很好地解释了ODBC和Python数据类型是如何映射的。

我看到了这一点,但我认为这只与字符串字段有关:必须使用Python吗?在Access中使用VBA可能很简单。@HansUp我同意Python不是最好的工具,因此我增加了您的评论。这是一次性的,我知道Python。我承认,在VBA中,任何与MS Office相关的东西都会更好地工作。我知道,在某个阶段,我将行转换为字符串,它将None转换为None。