【问题标题】:Looping through SQL query in python and saving to csv file by date在python中循环SQL查询并按日期保存到csv文件
【发布时间】:2020-05-20 22:39:25
【问题描述】:

任务描述

你好

我有一个数据库,想在 python 中使用 SQL 检索它的所有内容。我有兴趣将特定的 date 句点保存到他们自己的 csv 文件中。例如,要获取 2000 年的所有年份,date 将介于 20000101 和 20001231 (yyyy-mm-dd) 之间。这与以下代码完美配合:

df = pd.read_sql_query('SELECT * FROM data WHERE date BETWEEN 20000101 AND 20001231', database)
df.to_csv('2000_data.csv', sep =',')

但是,我希望循环遍历不同的年份,特别是从 1960 年到 2018 年,所以总共会输出 58 个不同的 csv 文件。

我可以手动更改日期,如下所示:

df = pd.read_sql_query('SELECT * FROM data WHERE date BETWEEN 20010101 AND 20011231', database)
df.to_csv('2001_data.csv', sep =',')

但这是非常低效的。在代码的查询部分更改日期以及在输出到相应的 csv 文件时更改年份的任何想法!

【问题讨论】:

    标签: python pandas sqlite loops csv


    【解决方案1】:

    创建一个值序列,步进 10k,然后遍历 using 参数化。

    sql = 'SELECT * FROM data WHERE date BETWEEN ? AND ?'
    
    for num in range(19600101, 20180102, 10000):
      df = pd.read_sql(sql, database, params=[num, num+1130]) 
      df.to_csv('{}_data.csv'.format(str(num)[:4]))
    

    【讨论】:

    • 完美!谢谢大佬! :)
    • 第一个问题,+1130 在做什么?
    • 它将 1 月 1 日所需的数字相加到 12 月 31 日渲染。参见演示:rextester.com/CYANP57336
    猜你喜欢
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 2019-04-09
    相关资源
    最近更新 更多