2016-01-28 85 views
1

我有一個相對簡單的SQLAlchemy查詢(一個MySQL數據庫上):SQLAlchemy的:格式化db.DateTime()列結果

my_date = db.session.query(func.max(MyTable.date_column)).one() 

所查詢的列是db.DateTime()類型。

現在我想在my_date格式化返回的日期:

my_date.isoformat() # fails 
my_date.strftime("%Y-%m-%d %H:%M:%S %z") # fails 

這是什麼東西,我得到的結果和我有什麼做的就是可以格式化的DateTime對象?

當我使用調試器檢查返回的對象時,我看到以下內容:(datetime.datetime(2016, 1, 28, 12, 35, 17),) - 但實際的Python datetime.datetime對象在調試器中看起來不同。

dir(my_date)返回以下結果:

['__add__', '__class__', '__contains__', '__delattr__', '__dir__', 
'__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', 
'__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', 
'__iter__', '__le__', '__len__', '__lt__', '__module__', '__mul__', 
'__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', 
'__setattr__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', 
'_asdict', '_fields', '_real_fields', 'count', 'index', 'keys'] 

回答

1

one()返回結果作爲KeyedTuple

您可以使用scalar()

my_date = db.session.query(func.max(MyTable.date_column)).scalar() 

或元組

my_date = db.session.query(func.max(MyTable.date_column)).one()[0] 
+0

這無處SQLAlchemy的文件中所提及獲得價值 - 一個應該怎麼知道呢?你確定它是一個「KeyedTuple」?我只得到'{result}'類型。 – Robert

+0

'type(my_date)'返回'sqlalchemy.util._collections.KeyedTuple'。並且教程(http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.html#querying)指出由Query返回的元組是由KeyedTuple類提供的命名元組。 –

+0

看起來我們使用了不同的版本,因爲我的系統上的'type(my_date)'返回'' – Robert