2016-04-18 10 views
0

Ich habe Schwierigkeiten zu verstehen, warum meine Django-Datenbankabfrage fehlschlägt.Django-Datenbankabfrage mit unerwartetem "ungültigem Double" beim Vergleich von Strings

Meine Django Abfrage sieht wie folgt aus:

 the_firebaseUID = self.request.query_params.get('firebaseUID', None) 
 
     this_user_profile = UserProfile.objects.filter(firebaseUID=the_firebaseUID)

Dies erzeugt die folgende Abfrage:

SELECT `userprofile_userprofile`.`id`, `userprofile_userprofile`.`user_id`, `userprofile_userprofile`.`firebaseUID` FROM `userprofile_userprofile` WHERE `userprofile_userprofile`.`firebaseUID` = 4929e406-9d75-43e2-afa4-fe641f3e85f5

Meine Modell:

class UserProfile(models.Model): 
 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
 
    firebaseUID = models.CharField(max_length=100)

Es gibt ein firebaseUID Feldeintrag mit dem Wert 4929e406-9d75-43e2-afa4-fe641f3e85f5

MySQL die folgende Fehlermeldung gibt, wenn die Abfrage der Datenbank ausgeführt wird:

11:03:51 \t SELECT `userprofile_userprofile`.`id`, `userprofile_userprofile`.`user_id`, `userprofile_userprofile`.`firebaseUID` FROM `userprofile_userprofile` WHERE `userprofile_userprofile`.`firebaseUID` = 4929e406-9d75-43e2-afa4-fe641f3e85f5 LIMIT 0, 1000 \t Error Code: 1367. Illegal double '4929e406' value found during parsing \t 0.198 sec

Antwort

0

Ich würde sagen, dass Ihre the_firebaseUID Variable als doppelt speichert. Sie sollten sicherstellen, dass es sich um eine Zeichenfolge handelt. Dies kann funktionieren:

this_user_profile = UserProfile.objects.filter(firebaseUID=str(the_firebaseUID)) 

Und die Abfrage sollte übersetzt werden:

SELECT `userprofile_userprofile`.`id`, `userprofile_userprofile`.`user_id`, `userprofile_userprofile`.`firebaseUID` FROM `userprofile_userprofile` WHERE `userprofile_userprofile`.`firebaseUID` = `4929e406-9d75-43e2-afa4-fe641f3e85f5` 
+0

Der Python-Debugger ist the_firebaseUID als str berichten, aber ich habe getan, wie Sie vorschlagen, und wickeln Sie die Variable in str(), aber das macht keinen Unterschied. Django erstellt immer noch eine SELECT-Abfrage, ohne den Wert von the_firebaseUID in Anführungszeichen zu schreiben. Wenn ich die Abfrage manuell bearbeite und abschicke, indem ich Zitate in den Wert von the_firebaseUID einfüge, gibt MySQL den Fehler zurück: Unbekannte Spalte (für den Wert von the_firebaseUID). –

+0

Aber ich denke, Sie haben es falsch gemacht. Sie sollten 'firebaseUID' und nicht' the_firebaseUID' in der rohen SQL-Abfrage schreiben – cor

+0

Ich schreibe nur in meinem Kommentar oben falsch Ich denke, es ist richtig im Code geschrieben. –