Форум сайта python.su
Доброго времени суток. Возникла такая ситуация - при SQL запросе
SELECT * FROM [delivery] WHERE delivery.date BETWEEN '26.12.12' AND '12.12.13'
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)
Офлайн
в методе con.execute, параметры к запросу нужно передавать вторым параметром.
см примеры: http://docs.python.org/2/library/sqlite3.html#sqlite3.Cursor.execute
и не надо их преобразовывать в строки.
Офлайн
Да это я знаю, просто привычка. До этого куча кода методом format написана - ничего, пока работает)
Ошибка то не в этом. Ошибка именно в понимании запросом даты. Он может найти, к примеру, с 2 по 9 ноября все даты, потом что…2 меньше 9. Как только обратная ситуация - выдает либо по одному ответу, либо вообще ничего.
Офлайн
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'
Офлайн