Как использовать параметры из pandas.read_sql для импорта данных с пандами Python из таблицы SQLite между датами - PullRequest
4 голосов
/ 03 апреля 2019

Я пытаюсь запросить таблицу из sqlite с помощью python pandas для анализа в блокноте jupyter.Цель - сделать запрос между двумя датами, которые я выбираю каждый раз, когда запускаю свой скрипт.

Я уже пробовал, как в этой ссылке:

столбец отметки времени в возвращаемой строке 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"

Запрос работает нормально и дает мне нужные значения.Так что дело в том, что 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})

Результат, который я получил, это если я поставлю его как вSQLite, python хорошо читает запрос и дает желаемый интервал значений, но я бы каждый раз выбирал даты и автоматически искал их.

Надеюсь, я проясню!Спасибо!

1 Ответ

2 голосов
/ 03 апреля 2019

У вас неверный синтаксис для передачи именованных параметров.См. Пример в sqlite3 документах :

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

Так что для вашего случая это должно быть:

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

pd.read_sql(query, con=conn,  params={"dstart":start, "dfinish":end})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...