2017-09-06 6 views
0

ich eine Modellklasse, die ich bin immer dies wie dieser Befehl über laufendePython-Flask-SQLAlchemy Get Datumsspalte im ISO-Format

all = Test.query.all() 

Jetzt

class Test(database.Model): 
     created_date = database.Column(database.DateTime, 
             default=datetime.utcnow, 
             nullable=False) 

sieht, das wird mir Daten im Format 2017-09-05 09:45:28 Ich möchte ISO-Darstellung von Daten wie 2017-09-05T09:45:28.263000 erhalten.

Eine Möglichkeit besteht darin, die empfangenen Daten nachzubearbeiten, aber was ist der bessere Ansatz? Gibt es ein SQLAlchemy-Konstrukt, das mir dabei helfen wird?

Antwort

2

Lassen Sie uns etwas klären, weil Ihre Frage ein wenig irreführend sein könnte.

Test.query.all() gibt die Liste der Testobjekte zurück, wobei jede eine Repräsentation des von Ihnen definierten Modells darstellt und deklarierte Attribute (wie creation_date) enthalten sollte.

>>> t = Test.query.all() 
>>> t 
[<Test object at 0x10010d2d0>, ...] 

Jetzt - Erstellungsdatum Attribut ist ein Datetime-Objekt und gibt Ihnen keine spezifische Darstellung per se. Stattdessen enthält es einige Methoden (wie __str__, __repr__, isoformat usw.), die Ihnen helfen, gewünschte Darstellung des Datetime-Objekts zu erhalten.

>>> t[0].created_date 
datetime.datetime(2017, 3, 2, 15, 34, 10, 272) 
>>> t[0].created_date.isoformat() 
'2017-03-02T15:34:10.000272' 

Die Art und Weise, wie Sie die Daten darstellen, es ist nicht etwas, das SQLAlchemy Schicht sollten sich bewusst sein, wie SQLAlchemy ORM ist (Modell Schicht) und durch Design sollte nicht lag im Controller/View-Ebene: more on mvc

Wenn Sie wirklich eine vordefinierte Darstellung eines Attributs in SQLAlchemy Models haben möchten, verwenden Sie @property Decorator in Ihrer Test Klasse.

@property 
def created_date(self): 
    return self.created_date.isoformat() 

auf das Mehr in SQLAlchemy Dokumentation: docs

+0

Ihre Punkte korrekt sind! Ich habe tatsächlich den Teil vermisst, bei dem die Serialisierung für die Marshmallow-Bibliothek gesorgt ist. Ich habe eine weitere Frage für die Anpassung der Serialisierung https://stackoverflow.com/questions/46074589/python-marshmallow-customize-formatting-of-class-member aufgeworfen –

Verwandte Themen