当前位置: 首页 > 知识库问答 >
问题:

使用带参数的Pandas从QuestDb中查询时间序列

瞿兴朝
2023-03-14
import pandas as pd
from sqlalchemy import create_engine
from datetime import datetime

engine = create_engine('postgresql://admin:quest@localhost:8812/mydb')
df = pd.read_sql_query(
  "select * from cases where ts between %(dstart)s and %(dfinish)s",
  con=engine, 
  params={"dstart":datetime(2020,12,24,16,0),"dfinish":datetime(2021,1,1,0,0)})
DatabaseError: (psycopg2.DatabaseError) between/and parameters must be constants
LINE 1: ...etry where ts between '2020-12-24T16:00:00'::timestamp ...
df = pd.read_sql_query(
  "select * from cases where ts > %(dstart)s and ts < %(dfinish)s",
  con=engine, 
  params={"dstart":datetime(2014,6,24,16,0),"dfinish":datetime(2014,6,24,17,0)})

但还是没有运气

DatabaseError: (psycopg2.DatabaseError) unsupported class
LINE 1: ... > '2020-06-24T16:00:00'::timestamp and ts < '2021-01-0...

它工作时没有参数,所以它不是完全错误的,但我在这里遗漏了一些东西。

共有1个答案

易扬
2023-03-14

QuestDb支持Postgres驱动程序,但不完全兼容SQL查询。很少有位不起作用,所以BETWEEN显然只能与常量一起使用。此外,当您使用python datetime参数时,它们会在查询中转换为'2020-06-24t16:00'::timestamp,QuestDb也不支持该参数

解决方法是传递字符串参数,并在查询本身中将它们转换为时间戳,类似于

df = pd.read_sql_query(
  "select * from cases where ts > to_timestamp(%(dstart)s, 'yyyy-MM-dd HH:mm:ss') " + 
  "and ts < to_timestamp(%(dfinish)s, 'yyyy-MM-dd HH:mm:ss')",
  con=engine, 
  params={"dstart":datetime(2020,12,24,16,0).strftime("%Y-%m-%d %H:%M:%S"),
  "dfinish":datetime(2021,6,24,17,0).strftime("%Y-%m-%d %H:%M:%S")})

这和评论中提到的特伦顿是一样的。

 类似资料:
  • 问题内容: 当运行这个查询 在这样的 它将抛出一个异常,即语法不好,很明显,因为我可以在sql-developer中运行相同的查询。 这是错误吗?我可以同时使用准备好的语句和间隔吗? 问题答案: 整个表达式都是文字,您不能简单地用变量(参数)替换它的一部分。请改用该函数。

  • 问题内容: 这是一个像这样的时间序列数据,称为df: 我想获取连续“值”为1的日期范围,因此如何获得最终结果,如下所示: 问题答案: 这应该做 每当Value更改时,value_grp将增加1。在下面,您可以提取分组结果

  • 问题内容: 我正在学习如何在Excel驱动的SQL查询中使用参数(实际上,我仍在学习SQL),我想更进一步,并在Excel中提供一个参数来过滤结果。 这是我的查询: 我需要做的是允许团队中的人在excel工作表中运行此查询,并在第二个JOIN中为“ GROUP_NAME”提供其组名。不幸的是,我无法使用语法(在此处找到),因为我需要从MODULE_FUNCTION表中提取所有结果,并且仅在提供的组

  • 问题内容: 进行时: 与此文件: (第一个列是UNIX时间戳,即自1970年1月1日起经过的秒数),当我每15秒对数据进行一次重采样时出现以下错误: 就像“ datetime”信息尚未解析: 如何使用熊猫模块导入带有存储为时间戳的日期的.CSV? 然后,一旦我能够导入CSV, 如何访问日期 > 2015-12-02 12:02:18的行? 问题答案: 我的解决方案类似于Mike的解决方案:

  • 我有一个本机查询要在Spring的@Query注释中使用。问题是我无法为LIMIT AND INTERVAL等非标准子句传递参数。 1) 是否可以在注释中传递限制参数。2) JPA中的程序等价物是什么。它有可以使用的查询接口吗? 此外,不会为每个查询更改limit和interval子句,但应该在jvm启动时设置。

  • 问题内容: 在Hibernate中是否可以用实际值而不是问号打印生成的SQL查询? 如果Hibernate API无法实现,您将如何建议使用实值打印查询? 问题答案: 您需要为以下类别启用日志记录: -设置为在执行所有SQL DML语句时记录它们 -设置为记录所有JDBC参数 因此,log4j配置如下所示: 第一个等效于legacy 属性,第二个则 打印绑定参数。 另一个解决方案(基于非hiber