【问题标题】:query for same date, different years SQAlchemy查询同一日期,不同年份的 SQLAlchemy
【发布时间】:2021-05-23 01:32:40
【问题描述】:

我正在尝试创建一个查询,该查询返回数据库中每年六月的所有温度。我知道如何获取特定年份的六月临时工,但不是所有年份,这是我获取 2017 年临时工的查询。关于如何在数据库中进行所有这些年的任何想法?

june_temps = session.query(Measurement.date, Measurement.tobs).filter(Measurement.date.between('2017-06-01','2017-06-30')).all()

谢谢!

【问题讨论】:

  • 这里是您需要的查询:select date, tobs from measurement where strftime('%m', date) = '06' order by 1 如果对您有帮助。

标签: sqlite sqlalchemy


【解决方案1】:

使用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')]

【讨论】:

    猜你喜欢
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2013-06-18
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 2013-09-25
    相关资源
    最近更新 更多