2012-04-27 67 views
1

選擇recorsd通過一個月的時候我有一個MySQL的表:SQLAlchemy的 - 在MySQL

create table t 
(
    id integer primary key, 
    time datetime not null, 
    value integer not null 
) 

和馬平類:

class T(Base): 
    __tablename__ = 't' 

    id = Column(INTEGER, primary_key=True, nullable=False, unique=True) 
    time = Column(DATETIME, nullable=False) 
    value = Column(INTEGER, nullable=False) 

我如何可以選擇從這個特定月份的所有值表使用sqlalchemy? mysql具有month函數:select value from t where month(time) = 4 但sqlalchemy沒有month函數。

回答

4

沒有加載所有T s轉換的會話,可以使用Functions過濾非四月對象直掉:

from sqlalchemy.sql import func 
qry = session.query(T).filter(func.MONTH(T.time) == 4) 
for t in qry: 
    print t.value 
+1

這是否適用於所有數據庫?我不認爲postgresql例如支持月標量。我認爲func在這裏是正確的想法,但在我看來''func.date_part('month',T.time)'是一個更好的方法去實現它。 – JosefAssad 2012-05-04 12:28:46

+0

你說得對,這是RDBMS特有的。這個問題用'mysql'標記,所以示例代碼是這樣的,它在那裏工作。 – van 2012-05-04 13:55:03

2

舉例來說,如果你想從所有四月月一年或一天不論記錄:

for t in session.query(T): 
    if t.time.month == 4: print t.value 
3

一個非常古老的問題,而是一個更好的答案就在這裏:

from sqlalchemy import extract 

session.query(T).fitler(extract('month', T.time)==7).all() 

這將在7月份將所有記錄返回到數據庫中。