Найти - Пользователи
Полная версия: Переменная, как условие отбора в sqlite3
Начало » Python для новичков » Переменная, как условие отбора в sqlite3
1
bystander
Здравствуйте, не могу найти, как подставлять переменные в качестве условий запроса на выбор данных из базы.
Пробовал так, что-то не катит.
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
ilnur
не то?
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)
Budulianin
Читай внимательно тут
@cckyi_boxxx
для начала попробуйте отправить запрос в бд без переменных тупо запихнув заведомо известные данные в строку , уверен на 90% что у вас ошибка в составлении запроса а не в прилепливании переменных к нему

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

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

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

print 'int %i , char %c , string %s' % (1 , 'x' , 'looooool')
JOHN_16
@cckyi_boxxx
как и в соседнем топике вы чего то не знаете, а именно format() - и быстрее и шире возможности, гораааздо шире
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB