[英]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)
historyDetailedInformationJson只是一个应该回复给我的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.