2

DB (MS-Access) からデータを読み取って操作し、新しいテーブルを作成した後に書き戻そうとしています。基本的にすべてうまくいきます(読み取り、書き込み、テーブルの作成)が、私が直面している問題は次のとおりです。

最初に作成したテーブルには、次のタイプの 5 つのフィールドがあります。

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

書きたいデータは次の形式です。

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

ご覧のとおり、データ要素には type があり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

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し、最後にリスト項目に日付を追加できます。そのために、モジュールstrptimeから使用できます。datetime

これは、コピペのソリューションとしてではなく、出発点としてお考えください。

于 2013-06-26T18:49:02.437 に答える