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
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). –
Aber ich denke, Sie haben es falsch gemacht. Sie sollten 'firebaseUID' und nicht' the_firebaseUID' in der rohen SQL-Abfrage schreiben – cor
Ich schreibe nur in meinem Kommentar oben falsch Ich denke, es ist richtig im Code geschrieben. –