Django Probleme mit Dezimalzahlen

Django, Flask, Bottle, WSGI, CGI…
Antworten
Kalito
User
Beiträge: 2
Registriert: Sonntag 18. Juli 2021, 13:11

Hallo,

ich war mir sicher die Frage heute Mittag schon gestellt zu haben, finde sie aber nicht mehr. Falls sie doch noch auftaucht, bitte ich die Dublette zu entschuldigen. Auch wenn ich vor kurzen mit Python und Django angefangen habe, kann ich auf einen großen Erfahrungsschatz in PHP und dessen Frameworks nachweisen. Jedoch stehe ich gerade an einer Stelle, die ich mir nicht erklären kann. Wenn ich eine Abfrage gegen eine Datenbank-Tabelle schicke, bekomme ich folgende Fehlermeldung:
InvalidOperation([<class 'decimal.InvalidOperation'>])
Die Abfrage geht wie folgt:

Code: Alles auswählen

date_conditions = Conditions.objects.get(field='date',scope='qlikview');
Das Modell sieht so aus:

Code: Alles auswählen

class Conditions(models.Model):
    scope = models.CharField(max_length=200)
    field = models.CharField(max_length=200)
    source = models.ForeignKey(Source, on_delete=models.CASCADE, null=True, related_name='%(class)s_source')
    ok_min = models.DecimalField(max_digits=3, decimal_places=3, null=True)
    ok_max = models.DecimalField(max_digits=3, decimal_places=3, null=True)
    info_min = models.DecimalField(max_digits=3, decimal_places=3, null=True)
    info_max = models.DecimalField(max_digits=3, decimal_places=3, null=True)
    warn_min = models.DecimalField(max_digits=3, decimal_places=3, null=True)
    warn_max = models.DecimalField(max_digits=3, decimal_places=3, null=True)
    error_min = models.DecimalField(max_digits=3, decimal_places=3, null=True)
    error_max = models.DecimalField(max_digits=3, decimal_places=3, null=True)
In der Datenbank (sqllite) stehen entweder Zahlen wie 5,001 oder -15,001 oder 1(zeigt mir so der DBeaver an, ist aber wahrscheinlich 1,000) oder halt NULL. Ich bin mir nur nicht sicher, ob in der DB als Dezimaltrennzeichen ein Punkt oder ein Komma verwendet wurde. Ich gehe aber von einem Punkt aus. Ebenso habe ich diese Probleme, wenn ich Dezimalwerte in die DB speichern möchte.

Ich selber kann mir den Fehler nicht erklären und auch in anderen Foren habe ich nicht wirklich etwas gefunden.

Habt Ihr eine Idee, wo mein Denkfehler ist?

Danke und Gruß Patrick
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Der Fehler weist darauf hin, dass du versuchst eine Zeichenkette in eine Decimalzahl zu wandeln, die nicht zu wandeln ist.
Soweit ich weiß, macht sqlite keine Typprüfung beim Schreien der Werte. Wie kommen dennn die Daten in die Datenbank?

Code: Alles auswählen

>>> from decimal import Decimal
>>> a = Decimal(5.1)
>>> b = Decimal("5.1")
>>> d = Decimal("5,1")
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    d = Decimal("5,1")
decimal.InvalidOperation: [<class 'decimal.ConversionSyntax'>]
Kalito
User
Beiträge: 2
Registriert: Sonntag 18. Juli 2021, 13:11

Hallo,

ich habe das Problem gefunden. Damit ich die Zahl 5,001 reinladen kann muss ich das Dezimalfeld mit max_digits = 4 und und decimal_places = 3 beim Model angeben.

Danke und Gruß Patrick
paddie
User
Beiträge: 101
Registriert: Donnerstag 11. Oktober 2018, 18:09

Dann wirst du aber spätestens bei deinen -15,001 das selbe Probleme bekommen. :D
Antworten