【问题标题】:python sql query where timestamp in listpython sql查询列表中的时间戳
【发布时间】:2018-09-14 20:02:24
【问题描述】:

我在 python 中有以下查询,我通过 pd.read_sql_query 使用它。它工作正常。我有一个日期列表,称为日期,用于查询。

for date i in dates:
     query = ('SELECT * FROM table WHERE id in'+ str(tuple(ids)) + ' AND date 
     between '+"'"+str(i)+"'"+' and '+"'"+str(i)+"'")

有没有更简单的方法来查询日期,例如 ID?我想要这样的东西:

query = ('SELECT * FROM table WHERE id in'+ str(tuple(ids)) + ' AND date in' + str(tuple(dates)) + "'")

但是,这不起作用,因为日期在我的 python 列表以及 sql 数据库中保存为时间戳。

我的 sql 数据如下所示:

id  date                 variable 
 A  20180101 00:00:00       1
 B  20180101 00:00:00       2
 B  20180501 00:00:00       3
 C  20180201 00:00:00       4

我有一个格式化为字符串的 id 列表:

["B", "C"]

还有一个日期列表,格式为 datetime64[ns]:

[20180101 00:00:00, 20180201 00:00:00]

想要的输出是:

id  date                 variable 
 B  20180101 00:00:00       2
 C  20180201 00:00:00       4

【问题讨论】:

  • 您能否提供一个“日期”的示例?一般来说,我正在寻找样本输入和输出。
  • 进行了更新。希望现在更清楚

标签: python sql date


【解决方案1】:

你可以做很多事情,但在我看来这是最易读的:

def join(l):
    return ",".join([f"'{x}'" for x in l])
ids_list = join(["B","C"])
dates_list = join(["20180101 00:00:00", "20180201 00:00:00"])

# below works for python 3.6+
print(f"SELECT * FROM table WHERE id in ({ids_list}) and date in ({dates_list})")

# below works for python < 3.6 (you can also use .format())
print("SELECT * FROM table WHERE id in %(ids_list)s and date in %(dates_list)s" % locals())

【讨论】:

  • @FriedrichFranz 你能指定你使用的是哪个python版本吗?我会相应地改变我的答案。
  • 我的错,我没有在字符串前面带 f,因为我不知道它的功能。供将来参考:它与 python 3.6.6 完美配合。
猜你喜欢
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多