Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 14, 2013 09:45:38

Razor
Зарегистрирован: 2012-09-11
Сообщения: 127
Репутация: +  2  -
Профиль   Отправить e-mail  

SQL Вывод по дате

Доброго времени суток. Возникла такая ситуация - при SQL запросе

SELECT * FROM [delivery] WHERE delivery.date BETWEEN '26.12.12' AND '12.12.13'
по идее, должны выводится сообщения за определенный период, но не выводится. Что я делаю не так? Одинарные кавычки? Двойные кавычки?

Замечено, что если число в первой дате меньше второй даты, то все выводится нормально.

Базы - SQLite3.

Код, на всякий случай:
sd1 =  (self.ui.date_ot_five.date()).toString('dd.MM.yyyy') # String Data 1 из QDateEdit 1
sd2 =  (self.ui.date_do_five.date()).toString('dd.MM.yyyy') # String Data 2 из QDateEdit 2
result_find = con.execute('SELECT id_delivery, date_delivery, id_provider, delivery.id_product,'
                  ' name_product, model, sum_product FROM delivery'
                  ', product WHERE product.id_product = delivery.id_product '
                  'AND date_delivery BETWEEN "{0}" AND "{1}"'.format(sd1, sd2))
self.ui.table_five.setRowCount(1) # table_five - QTableWidget
self.ui.table_five.setColumnCount(7)
for s, q in enumerate(result_find):
    self.ui.table_five.setRowCount(s+1)
         for d, val in enumerate(q):
              self.ui.table_five.setRowHeight(s, str_height)
              item = QtGui.QTableWidgetItem(val)
              self.ui.table_five.setItem(s, d, item)
Спасибо!

Отредактировано Razor (Дек. 14, 2013 09:57:01)

Офлайн

#2 Дек. 14, 2013 13:20:21

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

SQL Вывод по дате

в методе con.execute, параметры к запросу нужно передавать вторым параметром.
см примеры: http://docs.python.org/2/library/sqlite3.html#sqlite3.Cursor.execute
и не надо их преобразовывать в строки.

Офлайн

#3 Дек. 14, 2013 13:29:48

Razor
Зарегистрирован: 2012-09-11
Сообщения: 127
Репутация: +  2  -
Профиль   Отправить e-mail  

SQL Вывод по дате

Да это я знаю, просто привычка. До этого куча кода методом format написана - ничего, пока работает)

Ошибка то не в этом. Ошибка именно в понимании запросом даты. Он может найти, к примеру, с 2 по 9 ноября все даты, потом что…2 меньше 9. Как только обратная ситуация - выдает либо по одному ответу, либо вообще ничего.

Офлайн

#4 Дек. 15, 2013 02:59:18

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

SQL Вывод по дате

Razor
нельзя пренебрегать документацией
http://www.sqlite.org/lang_datefunc.html, а именно

Time Strings

A time string can be in any of the following formats:

YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
DDDDDDDDDD

т.е. в вашем запросе должно быть что то типа
BETWEEN '2012-12-26' AND '2013-12-12'



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version