Выбор из Sqlite по дате
Имеется БД Sqlite3 с полем даты в формате TEXT. Как выбрать записи, попадающие в интервал дат?
Интервал задается значениями DateEdit PyQT5. Если я эти значения преобразую в строку, то выборка идет по первому значению числа. Т.е. если задан интервал 01.12.2021-15.12.2021, то в выборку попадут все даты, число которых <= 15 невзирая на месяц и год. Если значения пользовательских дат оставляю как есть не преобразуя в string, то понятно, что падает с ошибкой. Сами данные в базе и DateEdit одинаковы формата dd.MM.yyyy
Пример:
dt1 = self.dtStart.date().toString("dd.MM.yyyy")
dt2 = self.dtEnd.date().toString("dd.MM.yyyy")
'SELECT dateRec, nameKli FROM main WHERE dateRec BETWEEN ? AND ? ORDER BY dateRec', (dt1, dt2))
Ответы (1 шт):
В данном конкретном случае, вероятно, поможет фильтрация в коде python
Приблизительно так:
from sqlite3 import connect
from datetime import datetime
conn = connect('mydb.sqlite')
cur = conn.cursor()
date_pattern = "%d.%m.%Y"
l_bound = datetime(2021, 12, 1)
u_bound = datetime(2021, 12, 15)
cur.execute(
"SELECT dateRec, nameKli FROM main ORDER BY dateRec"
)
def in_range(val: tuple):
d, _ = val
return l_bound <= datetime.strptime(d, date_pattern) <= u_bound
dataset = [*filter(in_range, cur.fetchall())]
Не стал пытаться манипулировать не понятными мне
date().toString("dd.MM.yyyy")и т.д. из неизвестного мне класса.
Не могу не согласиться с тем, что в этом случае каждый раз придется таскать полный набор записей из таблицы, но...