Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 21, 2013 14:13:07

bystander
Зарегистрирован: 2013-08-12
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Переменная, как условие отбора в sqlite3

Здравствуйте, не могу найти, как подставлять переменные в качестве условий запроса на выбор данных из базы.
Пробовал так, что-то не катит.

for t_line in TitleList:
    for d_line in DateRan:
        i = 0
        SumCostDay = cursor.execute('select sum(cost) from test_table where title  = ' + t_line +' and date between ' + DateRan[i] +' and ' + DateRan[i+1]'')
        i = i+1
Что я хотел сделать:
Дано:
База в sqlite3, в которой фиксируется информация по всем транзакциям всех товаров. Колонки, которые понадобятся:
date (текст, дата в формате YYYY-MM-DD HH:MM:SS.sss)
cost (целое число, цены (могут быть разными для одного и того же товара))
title (текст, наименование всех товаров)

Список TitleList с некоторыми из наименований, для которых нужно сделать расчёты.
Список DateRan, содержащий идущие по порядку даты первой транзакции в каждые сутки, формат такой же: YYYY-MM-DD HH:MM:SS.sss, и словарь кратких-полных форматов даты первой транзакции {YYYY-MM-DD:YYYY-MM-DD HH:MM:SS.sss, …}. не знаю, зачем я его собрал, но может пригодится.

Нужно: узнать, на какую сумму было продано товаров из списка TitleList в каждый из дней DateRan (сумма по колонке cost для всех строк, содержащих нужный товар в колонке title)
В моих мечтах, отобранные данные можно будет сложить в таблицу такого вида:
	02.11.2013	03.11.2013	04.11.2013	05.11.2013	06.11.2013 сумма	
title_1		25	16		4		1		4		50
title_2		23									23
title_3		2			3		5		5		15
title_4					34						34
title_5											0

Отредактировано bystander (Ноя. 21, 2013 14:15:44)

Офлайн

#2 Ноя. 21, 2013 15:10:39

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

Переменная, как условие отбора в sqlite3

не то?
http://docs.python.org/2/library/sqlite3.html

# Never do this -- insecure!
symbol = 'RHAT'
c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)
# Do this instead
t = ('RHAT',)
c.execute('SELECT * FROM stocks WHERE symbol=?', t)
print c.fetchone()
# Larger example that inserts many records at a time
purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
             ('2006-04-05', 'BUY', 'MSFT', 1000, 72.00),
             ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
            ]
c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)

Офлайн

#3 Ноя. 21, 2013 15:13:04

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Переменная, как условие отбора в sqlite3

Читай внимательно тут



Офлайн

#4 Ноя. 21, 2013 17:31:06

@cckyi_boxxx
От:
Зарегистрирован: 2012-01-13
Сообщения: 181
Репутация: +  14  -
Профиль   Отправить e-mail  

Переменная, как условие отбора в sqlite3

для начала попробуйте отправить запрос в бд без переменных тупо запихнув заведомо известные данные в строку , уверен на 90% что у вас ошибка в составлении запроса а не в прилепливании переменных к нему

что-же касаеться последних то как по мне то удобнее их запиливать следующим образом :

для начала по типам -
%s ——- для строк
%i ——- для чисел
%с —— для однобайтных значений ( аналог char в c++ )

эти символы надо вставить в строку куда тыкать переменные а затем подсунуть переменную типа typle() следующим образом

print 'int %i , char %c , string %s' % (1 , 'x' , 'looooool')



Отредактировано @cckyi_boxxx (Ноя. 21, 2013 17:32:55)

Офлайн

#5 Ноя. 21, 2013 22:44:07

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

Переменная, как условие отбора в sqlite3

@cckyi_boxxx
как и в соседнем топике вы чего то не знаете, а именно format() - и быстрее и шире возможности, гораааздо шире



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

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version