SQL Datetime WHERE子句返回错误的月份

2024-09-27 00:20:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用pyathena库和以下函数从AWS Athena中提取数据:

def import_ben_datalake(ACCESS_KEY, SECRET_KEY, S3_DIR, REGION, start, end):
    conn = pyathena.connect(aws_access_key_id = ACCESS_KEY, 
                            aws_secret_access_key = SECRET_KEY,
                            s3_staging_dir = S3_DIR,
                            region_name = REGION)
    sql = f"""SELECT columns
          FROM table
          WHERE column_datetime BETWEEN PARSE_DATETIME('{start.strftime("%Y-%m-%d")}', 'YYYY-MM-DD')
                                    AND PARSE_DATETIME('{end.strftime("%Y-%m-%d")}', 'YYYY-MM-DD')"""

    df = pd.read_sql(sql, conn)
    conn.close()

    return df

开始和结束参数是datetime.date变量,如下所示:

start_test = datetime.date(2020, 11, 22)
end_test = datetime.date(2020, 11, 28)

两者都是今年11月的日期,但当我调用该函数时,它将返回2020-1-22和2020-1-28之间的所有值

任何帮助都可以解决这个问题


Tags: key函数awssqldatetimesecretdates3
1条回答
网友
1楼 · 发布于 2024-09-27 00:20:46

请遵循解决我的问题的参数化查询示例:

def import_ben_datalake(ACCESS_KEY, SECRET_KEY, S3_DIR, REGION, start, end):
    conn = pyathena.connect(aws_access_key_id = ACCESS_KEY, 
                            aws_secret_access_key = SECRET_KEY,
                            s3_staging_dir = S3_DIR,
                            region_name = REGION)
    sql = """SELECT columns
             FROM table
             WHERE column.datetime BETWEEN %(start)s AND %(end)s"""

   df = pd.read_sql(sql, conn, params = {"start": start, "end": end})
   conn.close()

   return df

相关问题 更多 >

    热门问题