如何解决SQL Datetime WHERE 子句返回错误的月份
我正在使用 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,28)
两者都是今年 11 月的日期,但当我调用该函数时,它返回 2020 年 1 月 22 日和 2020 年 1 月 28 日之间的所有值。
任何帮助都会很好地解决这个问题!
解决方法
按照解决我的问题的参数化查询示例:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。