2014-08-31 42 views
0

我想根據表的某個屬性的函數來過濾查詢。例如,假設我有一個表Days,它有一個DateTime類型的屬性day。現在我只想選擇當天恰好是星期一的行,例如:SQLAlchemy基於表的某個字段的函數進行過濾

db.query(Days).filter(Days.days.strftime('%w')=='1') 

但這不起作用! SQLAlchemy以某種方式認爲這些日子是另一個表,strftime不是該表的屬性。什麼是正確的做法?

+0

如果您有第二個問題,請在第二個問題中提出,而不是作爲此問題的補充。我已經清理了一下。 – davidism 2014-09-01 00:38:11

回答

3

在編寫查詢時,您必須認識到您正在訪問的列是SQLAlchemy列,而不是Python值。一旦您查看查詢結果中的實際行,它們將只是Python值。在編寫查詢時,你需要用SQL表達式來表述它。

數據庫之間的日期表達式不同。對於PostgreSQL,使用extract()函數,該函數返回0(星期日)至6(星期六)的數字。對於MySQL,使用dayofweek函數,該函數返回數字1(星期日)至7(星期六)。

# PostgreSQL 
from sqlalchemy.sql import extract 
session.query(MyTable).filter(extract('dow', MyTable.my_date) == 1) 

# MySQL 
from sqlalchemy import func 
session.query(MyTable).filter(func.dayofweek(MyTable.my_date) == 2) 
相關問題