我正在从一组访问数据库中获取数值(在许多其他字符串和数值中)并将它们上传到单个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值。
答案 0 :(得分:3)
None
is a Python object,不是字符串。它相当于SQL Server中的NULL
,或Access中的“空”列值。
例如,如果我有一个具有以下定义的Access表:
包含以下值(请注意Number
列的第一个值为空):
相关的Python代码产生:
...
>>> cursor = connection.cursor()
>>> rows = cursor.execute('select * from Table1').fetchall()
>>> print(rows)
[(None, ), (1, )]
此示例确认空的Access值返回为None
。
这个PyODBC Documentation很好地解释了ODBC和Python数据类型的映射方式。