繁体   English   中英

在SQLAlchemy中按dateTime间隔过滤以下查询

[英]Filter by dateTime interval in SQLAlchemy the following query

我创建了一个连接到Postgres数据库的烧瓶API,我正在尝试创建一个路径,它将从数据库中获取历史数据,以便我可以接收一个json作为图表显示在前端(ReactJS)上。

现在,我有以下查询在pgAdmin上成功运行:

SELECT humidity, temperature, "waterpumpState", "dateTime" from public."systemInformation"  where "systemInformation"."dateTime" > current_date - interval '7 days'

我用SQLAlchemy创建了这个数据库模型:

class statusInformation(db.Model):
    __tablename__ = 'systemInformation'
    id = db.Column(db.Integer, unique=True, primary_key=True)
    humidity = db.Column(db.Float, nullable=False)
    temperature = db.Column(db.Float, nullable=False)
    waterpumpState = db.Column(db.Boolean, nullable=False)
    clientOverride = db.Column(db.Boolean, nullable=False)
    humidityLevelSetting = db.Column((db.String(250)))
    dateTime = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), nullable=False)

从该表中,我想使用SQLAlchemy查询仅提取湿度,温度和日期时间。

我希望从这一刻起获得所有不超过7天的条目,以便我可以将它们映射到我调用此路径时显示的JSON,并且我想创建一个ReactJS图表,显示其级别湿度和温度超过7天。

这是我在python中使用datetime尝试使用SQLAlchemy时所做的事情:

def get_historic_data():
        now = datetime.now()
        seven_days_ago = now - timedelta(days=7)
        historicData = statusInformation.query.filter(statusInformation.dateTime >= seven_days_ago)
        return statusInformation.historyDetailedInformationJson(historicData) 

historyDe​​tailedInformationJson只是一个应该回复给我的JSON模板,它看起来像这样:

   def historyDetailedInformationJson(self):
        return{
            'humidity':self.humidity,
            'temperature':self.temperature,
            'waterpumpState':self.waterpumpState,
            'dateTime':self.dateTime
        }

这是我尝试从get_historic_data打印结果时得到的:

SELECT "systemInformation".id AS "systemInformation_id", "systemInformation".emInformation".temperature AS "systemInformation_temperature", "systemInformaterpumpState", "systemInformation"."clientOverride" AS "systemInformation_clilSetting" AS "systemInformation_humidityLevelSetting", "systemInformation"."d
FROM "systemInformation"
WHERE "systemInformation"."dateTime" >= %(dateTime_1)s

如果有人能帮我澄清问题,我将不胜感激。 谢谢。

statusInformation.query.filter(statusInformation.dateTime >= seven_days_ago)将生成一个Query对象 ,您可以使用过滤器等递增地构建查询,但是您需要指定结果将用于实际执行查询的形式。

例如(假设statusInformation是SQLAlchemy ORM模型)如果historicData是您的查询对象,则historicData.all()将返回查询作为对象列表返回的行。 如果您只期望一个结果, historicData.one()将返回单个对象,并且如果查询结果中实际存在多行,则引发异常。

如果您检查查询文档,还有其他方法以其他方式解析查询(例如one_or_none()count() )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM