1

私はstackoverflowとpython\djangoを初めて使用します。私はすでに問題を解決しましたが、次回はもっと早く解決する方法について助けが得られることを望んでいました。

テーブルレコードをあるデータベースから別のデータベース(SQLサーバーからSQLlite)にコピーする非常に単純なPython関数があります。テーブルには数百の列があります。モデルオブジェクトをsqlliteに保存すると、djangoは次の例外をスローします。

'utf8'コーデックはバイトをデコードできません..。

いずれかの列のデータがutf8変換に問題があることを理解しています。私が知りたかったのは、これがどの列かということです。さまざまなアプローチを試しましたが、最終的には、不良列を見つけるために次のコードを作成する必要がありました。

build = Builds.objects.using('realdb').get(buildid=12524)
n = Builds()
for field in Builds._meta.fields:
    val = getattr(build, field.name);
    try:
        setattr(n, field.name, val)
        n.save(using="default")
    except:
        return HttpResponse(field.name + ": " + val.__str__())

基本的に、列の値を1つずつ新しいモデルオブジェクトにコピーし、エラーが発生すると停止します。次回これを行うためのより良い方法はありますか?PyCharmで例外を解除しようとしましたが、djangoフレームワーク自体でスローされた多くの例外をすべて解除します。

アロン。

4

1 に答える 1

0

ここで行っているように、すべてのフィールドをテストすることなく、どの特定のフィールドが問題を引き起こしているのかを判断する方法はないと思います。エラーを返す代わりに、問題のあるフィールドの修復を試みることができます。

Unicodeドキュメントのこのセクションをご覧ください。基本的に、非Unicode部分を置き換えるか、非Unicode部分を完全に削除することで、値を強制変換できます。

または、文字列がどのエンコーディングであるかがわかっている場合は、文字列をデコードし、string.encodeとをstring.decodeそれぞれ使用して適切に再エンコードできます。

于 2013-02-08T13:37:52.553 に答える