2016-07-05 75 views
0

假設我使用SQLAlchemy將通用.csv文件上載到mssql服務器。推測列類型SQLAlchemy

我該如何推斷每一列的類型?似乎必須明確聲明列,例如{'myvar':Column(Integer)}。有沒有辦法讓SQLAlchemy或其他庫自行推斷每個列的數據類型?

VB的功能「TransferText」可以做到這一點,但我想在Python中做到這一點。

+0

如果你有一個類'YourClass'那麼你可以檢查'YourClass.your_attribute.type.python_type' – fedorqui

+0

不幸的是,不會在我的情況下工作。通用.csv文件不包含任何類型或類信息 - 只有逗號分隔的字符串。我可以讀取頭文件以獲取列的數量和名稱,並創建一個類,其中每個參數默認情況下的類型爲None或String - 但我無法推斷出一個字符串是否可能代表另一種數據類型。 –

+0

你上傳*到*是什麼?也就是說,你能從目標表中獲取類型信息嗎? –

回答

0

根據您的數據,您只需使用ast.literal_eval即可離開。

import ast 

assert isinstance(ast.literal_eval('1'), int) 
assert isinstance(ast.literal_eval('1.0', float) 
assert isinstance(ast.literal_eval('True', bool) 
assert isinstance(ast.literal_eval('"foobar"', basestring) 

你也可以使用一些更復雜的如messytables它提供了一個type_guess方法。

http://messytables.readthedocs.io/en/latest/