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 行,保存 models.Model.save_base (self.object, raw=True) 文件“/opt/local/lib/python2.5/site-packages/django/db/models/base.py”,第 495 行,在 save_base 结果 = 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_query 返回查询中。execute_sql(return_id) 文件“/opt/local/lib/python2.5/site-packages/django/db/models/sql/subqueries.py”,第 320 行,在 execute_sql cursor = 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 行,在执行中返回 self.cursor.execute(sql, params) ProgrammingError: can't adapt参数)文件“/opt/local/lib/python2.5/site-packages/django/db/backends/util.py”,第 19 行,在执行中返回 self.cursor.execute(sql, params) ProgrammingError: can'不适应参数)文件“/opt/local/lib/python2.5/site-packages/django/db/backends/util.py”,第 19 行,在执行中返回 self.cursor.execute(sql, params) ProgrammingError: can'不适应

4

2 回答 2

5

can't adapt当 psycopg2 收到不知道如何转换为 SQL 语句的值的数据类型时,会引发该错误。例如,如果您不小心传递了一个列表,例如,对于一个应该是整数的值,psycopg2 将引发 this can't adapt 错误。

faq.txtpsycopg2 的源代码分发附带的文档是这样解释的:

为什么!cursor.execute()引发异常不能适应

Psycopg 通过查看对象类将 Python 对象转换为 SQL 字符串表示形式。当您尝试将没有为其类注册适配器的对象作为查询参数传递时,将引发异常。adapting-new-types有关信息,请参阅:ref:。

找到违规值的最佳第一步可能是在完全详细模式下运行 loaddata:python manage.py loaddata --verbosity=2 /Users/oleg/probs.json

好吧,我希望 loaddata 冗长能够起作用,而且我不必承认我从来没有找到一种优雅的方法来调试 django 的 loaddata 的适应错误。过去,我求助于在 django 的 loaddata 函数中插入打印语句,以便在发生错误时可以看到正在反序列化的值。我已经编辑了django/core/management/loaddata.py。函数obj.save()中的样子。handle()我希望这个忏悔能激发某人分享更好的解决方案:-)

于 2010-06-16T16:47:50.623 回答
0

好的,我结束了从我的数据库中复制转储,并在没有 python 的情况下在本地恢复它......

于 2010-06-18T07:34:07.497 回答