2011-09-29 2 views
0
contraindre

J'ai un problème unicode et, comme chaque fois que j'ai quelque chose lié, je suis complètement perdu ..Django - à Unicode

Un de mon modèle Django rend un TypeError:

Exception Value:  

coercing to Unicode: need string or buffer, long found 

Le ligne donnant problème est juste une chaîne (que je veux utiliser dans une requête MySQL):

query = unicode('''(SELECT asset_name, asset_description, asset_id, etat_id, etat_name FROM Asset LEFT OUTER JOIN Etat ON etat_id_asset=asset_id WHERE asset_id_proj='''+proj+''' AND asset_id_type='''+t.type_id+''' ORDER BY asset_name, asset_description) UNION (SELECT asset_name, asset_description, asset_id, 'NULL', 'NULL' FROM Asset WHERE asset_id_proj='''+proj+''' AND asset_id_type='''+t.type_id+''' AND asset_id IN (SELECT etat_id_asset FROM Etat)); ''') 

que peut-être mal ici?

+0

Que contient t.type_id et proj? – dragoon

+0

Ok, je viens de trouver la façon officielle de le faire dans Django et ça marche bien. Désolée de vous avoir fait perdre votre temps ! (C'est comme ceci: 'Person.objects.raw ('SELECT * FROM myapp_person OERE last_name =% s', [lname])') – Johanna

+1

Si vous voulez simplement sélectionner tout depuis une table, vous pouvez le faire plus efficacement: '' Person.objects.filter (last_name = lname) '' Voir les docs de Django ORM) – dragoon

Répondre

2

Je sais que vous avez compris une meilleure façon d'y parvenir, mais pour répondre à la question initiale, au cas où vous obtenez cette erreur encore une fois quelque part ailleurs dans le projet:

t.type_id semble être un entier long. Vous ne pouvez pas mélanger des entiers dans des chaînes à moins que vous ne convertissiez en chaîne, c'est vraiment simple:

myString = 'some string with type id ' + str(t.type_id) + ', and whatever else you want in the string.'