2

我正在尝试从数据库 (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)]

但这行不通,因为我的类型不是pythonic

有任何想法吗?

4

2 回答 2

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']
>>> 

然后从那里继续?

于 2013-06-26T18:50:47.577 回答
0

您可以使用等效的 Python 类型创建另一个list用于转换并将其用作:

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无日期并在末尾附加日期。为此,您可以strptimedatetime模块中使用。

请以此为起点,而不是作为复制粘贴解决方案。

于 2013-06-26T18:49:02.437 回答