2010-08-13 5 views
1

Dans le serveur de test, cela fonctionne. Mais la production donne cette traceback: quoi de différent? Et qu'est-ce que cette erreur signifie?Situation intéressante. Erreur de la base de données? Python. Django

Différent est uniquement dans les versions python. Dans le serveur de test, il est 2.6.5 et production 2.5.2. Comment puis-je me débarrasser de cette erreur sans changer de version?

True 
2008-10-16 15:20:00 
- did not match our database 
Traceback (most recent call last): 
    File "./mr/local/cluster/dynamic/virtualenv/lib/python2.5/site-packages/django/core/management/base.py", line 195, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/usr/local/cluster/dynamic/virtualenv/lib/python2.5/site-packages/django/core/management/base.py", line 222, in execute 
    output = self.handle(*args, **options) 
    File "/usr/local/cluster/dynamic/website/video/remmedia/management/commands/remmedia.py", line 50, in handle 
    self.FirstTimeLoad() 
    File "/usr/local/cluster/dynamic/website/video/remmedia/management/commands/remmedia.py", line 117, in FirstTimeLoad 
    med,created=RemMedia.objects.get_or_create(index=program.Id+50000000, defaults=fields) 
    File "/usr/local/cluster/dynamic/virtualenv/lib/python2.5/site-packages/django/db/models/manager.py", line 123, in get_or_create 
    return self.get_query_set().get_or_create(**kwargs) 
    File "/usr/local/cluster/dynamic/virtualenv/lib/python2.5/site-packages/django/db/models/query.py", line 335, in get_or_create 
    obj.save(force_insert=True) 
    File "/usr/local/cluster/dynamic/virtualenv/lib/python2.5/site-packages/django/db/models/base.py", line 410, in save 
    self.save_base(force_insert=force_insert, force_update=force_update) 
    File "/usr/local/cluster/dynamic/virtualenv/lib/python2.5/site-packages/django/db/models/base.py", line 495, in save_base 
    result = manager._insert(values, return_id=update_pk) 
    File "/usr/local/cluster/dynamic/virtualenv/lib/python2.5/site-packages/django/db/models/manager.py", line 177, in _insert 
    return insert_query(self.model, values, **kwargs) 
    File "/usr/local/cluster/dynamic/virtualenv/lib/python2.5/site-packages/django/db/models/query.py", line 1087, in insert_query 
    return query.execute_sql(return_id) 
    File "/usr/local/cluster/dynamic/virtualenv/lib/python2.5/site-packages/django/db/models/sql/subqueries.py", line 320, in execute_sql 
    cursor = super(InsertQuery, self).execute_sql(None) 
    File "/usr/local/cluster/dynamic/virtualenv/lib/python2.5/site-packages/django/db/models/sql/query.py", line 2369, in execute_sql 
    cursor.execute(sql, params) 
    File "/usr/local/cluster/dynamic/virtualenv/lib/python2.5/site-packages/django/db/backends/mysql/base.py", line 84, in execute 
    return self.cursor.execute(query, args) 
    File "/usr/local/cluster/dynamic/virtualenv/lib/python2.5/site-packages/MySQLdb/cursors.py", line 158, in execute 
    query = query % db.literal(args) 
    File "/usr/local/cluster/dynamic/virtualenv/lib/python2.5/site-packages/MySQLdb/connections.py", line 265, in literal 
    return self.escape(o, self.encoders) 
    File "/usr/local/cluster/dynamic/virtualenv/lib/python2.5/site-packages/MySQLdb/connections.py", line 198, in string_literal 
    return db.string_literal(obj) 
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-10: ordinal not in range(128) 

Après un certain temps de réflexion et de tests. Je remarque que l'erreur montre seulement quand je fais ceci:

med,created=RemMedia.objects.get_or_create(index=program.Id+50000000, defaults=fields) 

Après plus de temps de réflexion sur le test de fin, j'ai trouvé l'erreur. C'est dans le dictionnaire fields. Il y a une variable que je reçois de BeautifulSoup le code ressemble à:

     soup=BeautifulSoup(program.Description.encode('utf-8')) 
         name=soup.find('div',{'class':'head'}) 
         fields=dict(
           name=name.string, 
           description=program.Description.encode('utf-8'), 
           program_name=program.Name.encode('utf-8'), 
           program_date_time=program.RealDateTime, 
           topic_data_time=program.RealDateTime, 
           topic_tag='', 
           created=program.Updated, 
           media=media 
            ) 

Le problème est avec la variable name dans fields dictionnaire.

Reste à savoir: Comment le convertir afin qu'il ne donne pas une erreur?

+0

Quel système de base de données utilisez-vous en production (ressemble à MySQL)? Quel système de base de données utilisez-vous dans votre environnement de test? Les deux bases de données sont-elles différentes * d'une manière ou d'une autre? –

+0

Ils sont totalement identiques! On dirait que c'est impossible. – Pol

+0

La version différente est en python! Dans le premier serveur, il est 2.6.5 et 2.5.2 – Pol

Répondre

0

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-10: ordinal not in range(128)

Avez-vous un personnage avec une valeur ascii> 128? Probablement une lettre accentuée.

http://www.asciitable.com/

0

Si le problème se trouve dans la base de données, il est probablement un cadre. Si c'est dans le code python, vous pouvez essayer de placer cette ligne en haut de votre fichier python qui traite de la chaîne.

# coding:utf-8 
Questions connexes