2013-06-26 81 views
2

我試圖從數據庫(MS-Access)讀取數據,操作它們,然後在創建新表格後將其寫回。 基本上一切都運行良好(讀,寫,創建表),但我面臨的問題如下:Python:在MS-Access數據庫中寫入時更改類型

首先,我創建的表有5個字段有以下類型:

Types = ['integer', 'varchar(12)', 'integer', 'double', 'date'] 

的數據我想寫的形式是:

Items = ['1', 'Widgit', '5.0', '15.1234', '2009-01-29 13:05:30'] 

正如你所看到的數據元素具有類型str。所以,一般情況下,我應該這樣做:

[Type(Item) for (Type, Item) in zip(Types, Items)] 

但是,這是行不通的,因爲我的類型不Python的

任何想法?

+0

你想在Python或VBA中進行轉換嗎? – ChrisProsser

+0

我正在使用adodbapi使用python。 – Tengis

回答

1

你可能使用一個小函數將「數據庫」類型映射到「Python」類型,也許這樣?

def get_py_type(access_type): 
    if access_type == "integer": 
     return "int" 
    elif access_type.startswith("varchar"): 
     return "str" 
    elif access_type == "double": 
     return "float" 
    elif access_type == "date": 
     return "datetime" 
    else: 
     return "unknown" 

,那麼你可以將現有列表映射到Python類型的列表

>>> Types = ['integer', 'varchar(12)', 'integer', 'double', 'date'] 
>>> pyTypes = [get_py_type(item) for item in Types] 
>>> print pyTypes 
['int', 'str', 'int', 'float', 'datetime'] 
>>> 

,然後從那裏下去呢?

0

您可以爲轉換創建另一個list用等價的Python類型,並用它作爲:

Conversion_list = [int, str, int, float, str] 
# Python float is ~double, else use Decimal; 

在SQL查詢日期可能會被解析爲字符串

然後,您可以創建新名單如下:

[Conversion(Item) for (Conversion, Item) in zip(Conversion_list, Items)] 

如果未將日期解析爲str,則可以在列表項中創建一個不帶日期的list並在結尾附加日期。爲此,您可以使用datetime模塊中的strptime

請以此爲起點,而不是複製粘貼解決方案。