2010-06-16 4 views
4

Je vais avoir une erreur étrange avec l'installation d'appareil à partir des données sous-évaluées. J'utilise psycopg2 et django1.1.1django: ne peut pas s'adapter erreur lors de l'importation des données de base de données postgres

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 

D'abord, j'ai vérifié des problèmes similaires sur Internet. Celui-ci semblait très lié: http://code.djangoproject.com/ticket/5996, comme mes données a beaucoup de symboles non ASCII

Mais en fait, je l'ai vérifié mon installation django et il est ok il

Pourriez-vous conseiller ce qui est faux

= ===

Poursuite de l'enquête de déclaration d'impression après ajouté comme suggéré par la première réponse. Journal regarde la façon suivante:

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$ 

Erreur de dernier commentaire

<DeserializedObject: qwert2000's profile> 

Problème montage installation '/Users/oleg/probs.json': Traceback (appel le plus récent en dernier): Fichier «/opt/local/lib/python2.5/site-packages/django/core/gestion/commandes/loaddata.py "ligne 154, dans la poignée obj.save() fichier"/opt/local/lib/python2. 5/site-packages/django/core/sérialiseurs/BASE.PY "ligne 163, en économie models.Model.save_base (self.object, cru = True) fichier"/op t/local/lib/python2.5/site-packages/django/db/modèles/base.py "ligne 495, dans save_base résultat = manager._insert (valeurs, return_id = update_pk) fichier"/opt/local /lib/python2.5/site-packages/django/db/models/manager.py "ligne 177, dans _insert insert_query de retour (self.model, valeurs, ** kwargs) fichier"/opt/local/lib /python2.5/site-packages/django/db/models/query.py ", ligne 1087, dans la requête d'insertion return query.execute_sql (return_id) Fichier" /opt/local/lib/python2.5/site-packages /django/db/models/sql/subqueries.py ", ligne 320, dans execute_sql cursor = super (InsertQuery, self) .execute_sql (Aucun) Fichier" /opt/local/lib/python2.5/site-packages /django/db/models/sql/query.py ", ligne 2369, dans execute_sql cursor.execute (sql, par ams) Fichier "/opt/local/lib/python2.5/site-packages/django/db/backends/util.py", ligne 19, dans l'exécution return self.cursor.execute (sql, params) ProgrammingError : ne peut pas adapter

Répondre

0

Ok, j'ai fini la copie décharge de ma base de données, et le restaurer sans python localement ...

5

L'erreur can't adapt est déclenchée par psycopg2 lorsqu'il reçoit un type de données qu'il ne sait pas traduire en une valeur pour une instruction SQL. Par exemple, si vous passez accidentellement une liste, disons, pour une valeur supposée être un nombre entier, psycopg2 relèvera cette erreur impossible à adapter.

Le document faq.txt livré avec la distribution source de psycopg2 explique ainsi:

Why does !cursor.execute() raise the exception can't adapt?

Psycopg converts Python objects in a SQL string representation by looking at the object class. The exception is raised when you are trying to pass as query parameter an object for which there is no adapter registered for its class. See :ref: adapting-new-types for informations.

probablement votre meilleur premier passage à trouver la valeur incriminée consiste à exécuter loaddata en mode entièrement bavard: python gérer .py loaddata --verbosity = 2 /Users/oleg/probs.json

Eh bien, j'espérais que la verbosité de loaddata fonctionnerait et je n'aurais pas à avouer que je n'ai jamais trouvé une manière élégante de déboguer l'adaptation erreurs avec les données de chargement de django.Dans le passé, j'ai eu recours à l'insertion d'instructions d'impression dans la fonction loaddata de django pour que je puisse voir les valeurs désérialisées lorsque l'erreur se produit. J'ai modifié django/core/management/loaddata.py. Regardez de obj.save() dans la fonction handle(). J'espère que cette confession inspire quelqu'un pour partager une meilleure solution :-)

+0

mmmm .... Que puis-je faire ? J'ai simplement besoin d'importer des données dans la base de données ... Peut-être qu'il y a une autre façon de le faire? –

+0

Si vous adoptez la même approche de bas niveau, ouvrez la copie de django sur votre système et ajoutez une instruction print juste avant obj.save() dans le module loaddata.py pour voir quelles sont les données erronées que vous sortez du système. Le problème sera la dernière instruction d'impression avant la trace de la pile. –

+0

Oui, c'est. Voir ma dernière édition. Mais je ne comprends pas comment le problème est apparu ... Pourquoi DoesNotExist: La requête de recherche d'utilisateur n'existe pas. –

Questions connexes