2016-04-29 19 views
3

Ich habe zwei Ansätze ausprobiert und beide funktionieren nicht, ich habe auf Google gesucht und keine passenden Lösungen gefunden. Mein Code sieht so aus:Wie erstellt man eine ganze Zahl mit Sqlalchemy?

intField = Column(SmallInt(), length=5) 

Und der Fehler sagt:

Unknown arguments passed to Column: ['length'] 

ich auch versucht, zu wissen es nicht funktionieren sollte, diese Lösung:

intField = Column(SmallInt(5)) 

Und es funktioniert nicht weil dieser SqlAlchemy-Datentyp keine Argumente akzeptiert.

Irgendwelche Ideen?

[Update]

Ich verwende MySQL als Datenbank-Engine, so dass die Lösung hier ist mysql eigenen Integer-Typen zu importieren, und geben Sie dann die Länge ich es sein will.

from sqlalchemy.dialects import mysql 

Integer = mysql.INTEGER 

class ... 
    ... 
    intField = Column(Integer(5)) 

Aber ich frage mich immer noch, ob es einen allgemeineren Ansatz ist:

Im obigen Beispiel würde ich nur tun müssen?

+0

Warum ein numerisches Feld anstelle eines 'String (6)' mit Validierungen, um nur Zahlen zu akzeptieren? – iurisilvio

+0

Das Validieren, Konvertieren und alle zugehörigen Vorgänge verursachen zusätzlichen Aufwand. Plus-Integer-Operationen sind bei Berechnungen schneller. Ich nehme an, dass 'code' als Attribut hier ein wenig irreführend ist, lassen Sie mich das ändern, um meinen Anwendungsfall besser zu erklären. – benjaminz

Antwort

2

MySQL hat die DECIMAL/NUMERIC Art.

Verwenden Sie Decimal(5, 0) für ein Feld mit 5 Ziffern.

Verwenden Sie dies nur, wenn Sie wirklich eine Nummer benötigen. Wenn Sie mit diesem Feld keine Mathematik machen, bevorzugen Sie eine String(5) und validieren Sie die Ziffern (isdigit() ist Ihr Freund).

Behandeln Sie es in SQLAlchemy als Numeric field.

+0

Hallo, tut mir leid wegen der Verwirrung, die Verwendung der Postleitzahl ist ein schlechtes Beispiel. Ich wollte fragen, ob ich mit diesem Feld rechnen möchte, und möchte AUCH eine Spaltenbreite dafür angeben. Was würde ich tun? – benjaminz

+1

@benjaminz verwenden Sie zum Beispiel die 'DECIMAL (5, 0)'. In SQLAlchemy ist es ein 'numerisches' Feld. http://docs.sqlalchemy.org/en/latest/core/type_basics.html#sqlalchemy.types.Numeric – iurisilvio

+0

Dies kann eine richtige Lösung sein, könnten Sie Ihre Antwort aktualisieren, so dass ich sie akzeptieren kann? Vielen Dank! – benjaminz

Verwandte Themen