使用extract 仅获取月份 == 6。
文档:https://docs.sqlalchemy.org/en/13/core/sqlelement.html#sqlalchemy.sql.expression.extract
from sqlalchemy import extract
session.query(Measurement.date,Measurement.tobs)\
.filter(extract('month',Measurement.date)==6)\
.all()
完整的、经过测试的示例(为清楚起见使用了不同的列名):
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine, extract, Date, Integer, Column, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:', echo=True)
Base = declarative_base()
class Measurement(Base):
__tablename__ = 'measurement'
id = Column(Integer, primary_key=True)
meas_date = Column(Date)
meas_title = Column(String(64))
Base.metadata.create_all(engine)
Session = sessionmaker(engine)
session = Session()
meas1 = Measurement(meas_title='foo',meas_date=dt.date(2016,6,1))
meas2 = Measurement(meas_title='bar',meas_date=dt.date(2017,6,30))
meas3 = Measurement(meas_title='baz',meas_date=dt.date(2018,7,1))
session.add_all([meas1,meas2,meas3])
session.commit()
session.query(Measurement.id,Measurement.meas_date,Measurement.meas_title)\
.filter(extract('month',Measurement.meas_date)==6)\
.all()
输出:
Out[1]: [(1, datetime.date(2016, 6, 1), 'foo'),
(2, datetime.date(2017, 6, 30), 'bar')]