2014-02-10 33 views
2

我正在從一組訪問數據庫中取數值並將其上傳到單個MS SQL Server數據庫。pyodbc數值被標記爲'None'而不是NULL或空的問題

我使用的是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'實例,並將其替換爲由ODBC驅動程序解釋爲NULL值的'NULL'。

+0

我看到了這個,但我認爲這只是與字符串字段有關: http://code.google.com/p/pyodbc/issues/detail?id=316 – AER

+3

你必須使用Python嗎? Access中的VBA可能很簡單。 – HansUp

+1

@HansUp我同意Python不是最好的工具,因此我提高了你的評論。這是一次,我知道Python。任何與MS Office有關的事情在VBA中都會更好,我承認。 – AER

回答

3

None is a Python object,不是一個字符串。它相當於SQL Server中的NULL,或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數據類型提供了一個很好的解釋。

+0

我看到,在一個階段,我將行變成了一個字符串,它將None變成了無。 – AER

相關問題