2

latin_1文字セットを使用するSQLServerデータベースから、utf-8文字セットを使用するGreenplum/postgresデータベースにデータを抽出する作業を行っています。挿入の直前に文字列値を変換しようとしていますが、これを行うと:

row=[i.decode('latin_1') for i in row]
row=[i.encode('utf-8') for i in row]

デコードがint型のメンバーではないというエラーが表示されます。整数値が入ってくるという点でそれは理にかなっています。しかし、文字列もあります。私が読んだこの種の他の投稿では、答えは常に即座にそしてはっきりと「あなたは常にどのタイプがやってくるのかを知っているべきです」でした。多くの点で静的クエリなので、私はそうしますが、私が書くすべてのクエリの変換を実行したいiの値のセットを定義することは、ひどく扱いにくく、正直に保守できないようです。タイプテストは、ここではクリーンでカプセル化可能で再利用可能な答えのように思われますね。

助言がありますか?

4

2 に答える 2

3

次のような小さな関数を使用します。

def convert(s):
    try:
        return s.decode('latin-1').encode('utf8')
    except AttributeError:
        return s

その後

row = map(convert, row) # or a compr if you prefer that

int利点は、自動的以外のタイプも処理することです。

于 2012-06-17T09:36:57.590 に答える
2

row = [i.decode('latin_1') if not isinstance(i,int) else i for i in row]

于 2012-06-17T08:50:50.463 に答える