4

ダンプされたデータからフィクスチャをインストールする際に奇妙なエラーが発生しました。psycopg2とdjango1.1.1を使用しています

silver:probsbox oleg$ python manage.py loaddata /Users/oleg/probs.json 
Installing json fixture '/Users/oleg/probs' from '/Users/oleg/probs'.
Problem installing fixture '/Users/oleg/probs.json': Traceback (most recent call last):
  File "/opt/local/lib/python2.5/site-packages/django/core/management/commands/loaddata.py", line 153, in handle
    obj.save()
  File "/opt/local/lib/python2.5/site-packages/django/core/serializers/base.py", line 163, in save
    models.Model.save_base(self.object, raw=True)
  File "/opt/local/lib/python2.5/site-packages/django/db/models/base.py", line 495, in save_base
    result = manager._insert(values, return_id=update_pk)
  File "/opt/local/lib/python2.5/site-packages/django/db/models/manager.py", line 177, in _insert
    return insert_query(self.model, values, **kwargs)
  File "/opt/local/lib/python2.5/site-packages/django/db/models/query.py", line 1087, in insert_query
    return query.execute_sql(return_id)
  File "/opt/local/lib/python2.5/site-packages/django/db/models/sql/subqueries.py", line 320, in execute_sql
    cursor = super(InsertQuery, self).execute_sql(None)
  File "/opt/local/lib/python2.5/site-packages/django/db/models/sql/query.py", line 2369, in execute_sql
    cursor.execute(sql, params)
  File "/opt/local/lib/python2.5/site-packages/django/db/backends/util.py", line 19, in execute
    return self.cursor.execute(sql, params)
ProgrammingError: can't adapt

まず、インターネットで同様の問題を確認しました。これは非常に関連しているようです:http://code.djangoproject.com/ticket/5996、私のデータには多くの非ASCII記号が含まれているため

しかし、実際にはdjangoのインストールを確認しましたが、問題ありません。

何が悪いのかアドバイスしてもらえますか

====

最初の回答で提案されたように、印刷ステートメントを追加した後、調査を続けました。ログは次のようになります。

silver:probsbox oleg$ python manage.py loaddata /Users/oleg/probs.json 
Installing json fixture '/Users/oleg/probs' from '/Users/oleg/probs'.
<DeserializedObject: Novice>
<DeserializedObject: Junior>
<DeserializedObject: Chess enthusiast>
<DeserializedObject: Experienced player >
<DeserializedObject: Smart player>
Problem installing fixture '/Users/oleg/probs.json': Traceback (most recent call last):
  File "/opt/local/lib/python2.5/site-packages/django/core/management/commands/loaddata.py", line 153, in handle
    print obj
  File "/opt/local/lib/python2.5/site-packages/django/core/serializers/base.py", line 155, in __repr__
    return "<DeserializedObject: %s>" % smart_str(self.object)
  File "/opt/local/lib/python2.5/site-packages/django/utils/encoding.py", line 107, in smart_str
    return str(s)
  File "/opt/local/lib/python2.5/site-packages/django/db/models/base.py", line 335, in __str__
    return force_unicode(self).encode('utf-8')
  File "/opt/local/lib/python2.5/site-packages/django/utils/encoding.py", line 71, in force_unicode
    s = unicode(s)
  File "/Users/oleg/Sites/probsbox/registration/models.py", line 58, in __unicode__
    return u"%s's profile" %(self.user.username)
  File "/opt/local/lib/python2.5/site-packages/django/db/models/fields/related.py", line 257, in __get__
    rel_obj = QuerySet(self.field.rel.to).get(**params)
  File "/opt/local/lib/python2.5/site-packages/django/db/models/query.py", line 305, in get
    % self.model._meta.object_name)
DoesNotExist: User matching query does not exist.

silver:probsbox oleg$ 

最後のコメントからのエラー

<DeserializedObject: qwert2000's profile>

フィクスチャのインストールの問題'/Users/oleg/probs.json':トレースバック(最後の最後の呼び出し):ファイル "/opt/local/lib/python2.5/site-packages/django/core/management/commands/loaddata.py "、154行目、ハンドルobj.save()ファイル" /opt/local/lib/python2.5/site-packages/django/core/serializers/base.py "、163行目、savemodels.Model.save_base (self.object、raw = True)ファイル "/opt/local/lib/python2.5/site-packages/django/db/models/base.py"、495行目、save_base result = manager._insert(values、 return_id = update_pk)ファイル "/opt/local/lib/python2.5/site-packages/django/db/models/manager.py"、177行目、_insert return insert_query(self.model、values、** kwargs)ファイル"/opt/local/lib/python2.5/site-packages/django/db/models/query.py"、行1087、insert_queryreturnquery。execute_sql(return_id)ファイル "/opt/local/lib/python2.5/site-packages/django/db/models/sql/subqueries.py"、行320、execute_sqlカーソル= super(InsertQuery、self).execute_sql(なし)ファイル "/opt/local/lib/python2.5/site-packages/django/db/models/sql/query.py"、2369行目、execute_sql cursor.execute(sql、params)ファイル "/ opt / local / lib / python2.5 / site-packages / django / db / backends / util.py "、19行目、実行時return self.cursor.execute(sql、params)ProgrammingError:適応できませんparams)ファイル "/opt/local/lib/python2.5/site-packages/django/db/backends/util.py"、19行目、execute return self.cursor.execute(sql、params)ProgrammingError:can ' t適応params)ファイル "/opt/local/lib/python2.5/site-packages/django/db/backends/util.py"、19行目、execute return self.cursor.execute(sql、params)ProgrammingError:can ' t適応

4

2 に答える 2

5

エラーは、can't adaptSQLステートメントの値に変換する方法がわからないデータ型を受け取ったときにpsycopg2によって発生します。たとえば、誤ってリストを渡した場合、たとえば、整数であると想定される値の場合、psycopg2はこれを適応できないエラーを発生させます。

faq.txtpsycopg2のソース配布に付属しているドキュメントでは、次のように説明されています。

なぜ!cursor.execute()例外を発生させても適応できないのですか?

Psycopgは、オブジェクトクラスを調べて、PythonオブジェクトをSQL文字列表現に変換します。クラスにアダプタが登録されていないオブジェクトをクエリパラメータとして渡そうとすると、例外が発生します。詳細については、:ref:adapting-new-typesを参照してください。

おそらく、問題のある値を見つけるための最善の最初のパスは、loaddataを完全に詳細なモードで実行することです。pythonmanage.pyloaddata --verbosity = 2 /Users/oleg/probs.json

さて、私はloaddataの冗長性が機能することを望んでいました。そして、djangoのloaddataを使用して適応エラーをデバッグするエレガントな方法を見つけたことがないことを告白する必要はありません。以前は、エラーが発生したときに値が逆シリアル化されていることを確認できるように、djangoのloaddata関数にprintステートメントを挿入することに頼っていました。編集しましdjango/core/management/loaddata.pyた。関数で見obj.save()てくださいhandle()。この告白が誰かにもっと良い解決策を共有するきっかけになることを願っています:-)

于 2010-06-16T16:47:50.623 に答える
0

OK、データベースからのダンプのコピーを終了し、Pythonを使用せずにローカルに復元しました...

于 2010-06-18T07:34:07.497 に答える