如何使用 pandas.read_sql 中的参数从日期之间的 SQLite 表中使用 Python pandas 导入数据

Car*_*cia 5 python sqlite pandas

我正在尝试使用 python pandas 从 sqlite 查询表以在 jupyter notebook 中进行分析。目标是在我每次运行脚本时选择的两个日期之间进行查询。

我已经在这个链接中尝试过:

sqlite中的时间戳列在python中返回字符串

带参数的 Pandas read_sql

在最后一个链接中,脚本执行良好,但我加载的数据框中没有任何数据。

当我在 SQLite 中手动执行时,编写如下内容:

SELECT *
FROM 'Historique'
WHERE "index" BETWEEN "2018-12-10 00:00:00" AND "2019-01-01 00:00:00"
Run Code Online (Sandbox Code Playgroud)

查询工作正常,它给了我我想要的值。所以就是那个python,我认为它不能识别我发送的参数。

我的代码是:

import pandas as pd
import sqlite3


conn = sqlite3.connect('FR033_Historique.sqlite')
cur = conn.cursor()

start = input("First day to take")
start = pd.to_datetime(start, dayfirst=True)


end = input("last day to take")
end = pd.to_datetime(end, dayfirst=True)




Analyse = pd.read_sql(('SELECT *'
                       'FROM "Historique"'
                       'WHERE "index" BETWEEN %(dstart)s AND %(dfinish)s'),
                       con=conn,  params={"dstart":start,"dfinish":end})

Run Code Online (Sandbox Code Playgroud)

我得到的结果是,如果我把它放在 SQLite 中,python 可以很好地读取查询并给出我想要的值的间隔,但我会每次获取日期并自动搜索它。

我希望我说清楚!谢谢!

the*_*orm 2

您的命名参数传递语法错误。请参阅sqlite3 文档中的示例:

# And this is the named style:
cur.execute("select * from people where name_last=:who and age=:age", {"who": who, "age": age})
Run Code Online (Sandbox Code Playgroud)

所以对于你的情况应该是:

query = '''SELECT *
           FROM "Historique"
           WHERE "index" BETWEEN :dstart AND :dfinish'''

pd.read_sql(query, con=conn,  params={"dstart":start, "dfinish":end})
Run Code Online (Sandbox Code Playgroud)