[英]sql: select list of columns
我想传递一个 str 或 list 参数,并希望 sql 知道如何处理它。 list_col='date1, date2, date3, date4'
最后我想要 dataframe date1, date2, date3, id
query = """
SELECT {list_col} AT TIME ZONE 'Europe/Paris' as {list_col}, {table}.{id}
FROM {table}
ORDER BY {table}.{id}
"""
def fun_query(table_name, list_col, id):
return query.format(table=table_name, list_col=list_col, id=id)
请问有人知道怎么做吗?
正如已经指出的那样,这以您建议的方式不可行,因为AT TIME ZONE
和AS
子句都应与每列一起出现。 我建议做这样的事情。
query = """
SELECT {date_cols_as_tz}, {table}.{id}
FROM {table}
ORDER BY {table}.{id}
"""
def fun_query(table_name, list_col, id, tz="'Europe/Paris'"):
date_cols_as_tz = ",".join((f"{c} AT TIME ZONE {tz} as {c}" for c in list_col))
return query.format(date_cols_as_tz=date_cols_as_tz, table=table_name, list_col=list_col, id=id)
当您调用例如fun_query("my_table", ["date1", "date2"], "table_id")
并打印它时,您会得到以下查询:
SELECT date1 AT TIME ZONE 'Europe/Paris' as date1,date2 AT TIME ZONE 'Europe/Paris' as date2, my_table.table_id
FROM my_table
ORDER BY my_table.table_id
主要变化是:
fun_query
中创建date_cols_as_tz
list_col
参数使用真实列表(不是像"date1,date2"
这样的字符串,而是像["date1", "date2"]
这样的列表)tz
参数此解决方案的优点是您可以通过使用不同的tz
值而不是硬编码值来轻松更改时区。
另请注意,此 function 预计list_col
中的所有列都是日期(但如果我正确理解您的问题,这可能是您所期望的)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.