Найти - Пользователи
Полная версия: Формирование SQL запроса в python
Начало » Python для новичков » Формирование SQL запроса в python
1
r4khic
Выполняю в цикле такой код:
 sql = '''INSERT INTO items (res_id, log_id, link, title, content, n_date, nd_date, s_date, not_date)'''
                        values = ''' VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s') ''' % (
                                res_id,
                                log_id,
                                resource_link,
                                item_title,
                                item_content,
                                n_date,
                                nd_date,
                                s_date,
                                not_date)
                        result = sql + values
В итоге в данный момент у меня в result хранятся такие данные:
 INSERT INTO items (res_id, log_id, link, title, content, n_date, nd_date, s_date, not_date) VALUES ('35', '1', 'http://bryansk-news.net/society/2019/10/07/37428.html', 'Брянцы поругались из-за «Джокера»', '| Общество
Нешуточная полемика развернулась в социальных сетях из-за криминальной драмы «Джокер», которая на прошлой неделе вышла на большие экраны в Брянске.
Пост этой ленте Тодда Филлипса посвятили в одной из брянских групп ВКонтакте. Посмотрели публикацию более 26 тысяч человек. Комментируют брянцы активно, однако единодушия в оценках нет. Одни называют «Джокера» шедевром, а Хоакина Феникса, исполнившего главную роль,  гением. Другие плюются, поскольку ожидали увидеть очередной попкорновый экшн, а не трагическую историю маленького человека.
В итоге страсти накаляются. Кто-то свое мнение обосновывает, другие переходят на личности.
Источник: https://news.nashbryansk.ru
', 'Added by Raha', '1570402602', '1570429215.989103', '2019-10-07') 
INSERT INTO items (res_id, log_id, link, title, content, n_date, nd_date, s_date, not_date) VALUES ('35', '1', 'http://bryansk-news.net/society/2019/10/07/37429.html', 'Брянская учительница собрала коллекцию необычных окон', 'Брянская учительница собрала коллекцию необычных окон
Сегодня, 08:00
Ирина Новикова, педагог из города Унеча Брянской области, вооружилась фотоаппаратом и решила запечатлеть резные оконные ставни брянских домиков.
У себя на странице ВКонтакте Ирина написала, что начало коллекции положила одна осенняя прогулка.
Резных оконных ставней становится все меньше, даже в деревнях наличники заменяют пластиковыми окнами - констатирует Новикова.
По ее мнению, это приводит к потери аутентичности, утрате традиций и культуры русского народа.
Снимки окон можно посмотреть по ссылке.
Источник: https://news.nashbryansk.ru
', 'Added by Raha', '1570402845', '1570429217.0539544', '2019-10-07') 
А мне надо чтобы данные были в такие:
 INSERT INTO items (res_id, log_id, link, title, content, n_date, nd_date, s_date, not_date) VALUES ('35', '1', 'http://bryansk-news.net/society/2019/10/07/37428.html', 'Брянцы поругались из-за «Джокера»', '| Общество
Нешуточная полемика развернулась в социальных сетях из-за криминальной драмы «Джокер», которая на прошлой неделе вышла на большие экраны в Брянске.
Пост этой ленте Тодда Филлипса посвятили в одной из брянских групп ВКонтакте. Посмотрели публикацию более 26 тысяч человек. Комментируют брянцы активно, однако единодушия в оценках нет. Одни называют «Джокера» шедевром, а Хоакина Феникса, исполнившего главную роль,  гением. Другие плюются, поскольку ожидали увидеть очередной попкорновый экшн, а не трагическую историю маленького человека.
В итоге страсти накаляются. Кто-то свое мнение обосновывает, другие переходят на личности.
Источник: https://news.nashbryansk.ru
', 'Added by Raha', '1570402602', '1570429215.989103', '2019-10-07') 
('35', '1', 'http://bryansk-news.net/society/2019/10/07/37429.html', 'Брянская учительница собрала коллекцию необычных окон', 'Брянская учительница собрала коллекцию необычных окон
Сегодня, 08:00
Ирина Новикова, педагог из города Унеча Брянской области, вооружилась фотоаппаратом и решила запечатлеть резные оконные ставни брянских домиков.
У себя на странице ВКонтакте Ирина написала, что начало коллекции положила одна осенняя прогулка.
Резных оконных ставней становится все меньше, даже в деревнях наличники заменяют пластиковыми окнами - констатирует Новикова.
По ее мнению, это приводит к потери аутентичности, утрате традиций и культуры русского народа.
Снимки окон можно посмотреть по ссылке.
Источник: https://news.nashbryansk.ru
', 'Added by Raha', '1570402845', '1570429217.0539544', '2019-10-07') 
Отличие первого варианта от второго в том что,в первом варианте INSERT INTO и VALUES присутствует 2 раза.А во втором INSERT INTO и VALUES присутствует всего 1 раз.
Как это можно сделать?
Rafik
В твоей же теме про insert py.user.next очень подробно, с примером, объяснил про executemany. Возьми это за основу и делай как посоветовали.
r4khic
Rafik
В твоей же теме про insert py.user.next очень подробно, с примером, объяснил про executemany. Возьми это за основу и делай как посоветовали.
Я понял про этот совет,мне просто интересно провести некий “бенчмарк”
Rafik
Набросал на скорую руку. Возможно где-то и накосячил, но идея приблизительно такова:
 # Это объявляется до цикла сбора данных
sql = '''INSERT INTO items (res_id, log_id, link, title, content, n_date, nd_date, s_date, not_date) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s') '''
list_values = []
# Здесь начинаем цикл сбора в список записей, т.е. вот это всё хозяйство собираем:
list_values.append( ('35', '1', 'http://bryansk-news.net/society/2019/10/07/37428.html', 'Брянцы поругались из-за «Джокера»', 'бла-бла-бла', 'Added by Raha', '1570402602', '1570429215.989103', '2019-10-07') )
# Здесь для наглядности специально сделал пробел между скобками, относящимися к функции append и скобками кортежа.
# Точно также, через append, добавляем следующий кортеж (запись) в список.
# После цикла преобразуем список в кортеж таким макаром:
values = tuple(list_values)
# Вот теперь можно вызвать executemany вот таким способом:
cursor.executemany(sql, values)
 
r4khic
Нашел решение.
Перед началом цикла создаю переменную с таким шаблоном запроса.
 sql = '''INSERT INTO items (res_id, log_id, link, title, content, n_date, nd_date, s_date, not_date) VALUES'''
Потом внутри цикла выполняю конкатенацию:
 sql +=  ''',('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')''' % (
                         res_id,
                         log_id,
                         str(resource_link),
                         str(item_title),
                         str(item_content),
                         str(n_date),
                         nd_date,
                         s_date,
                         not_date
                        )
В итоге у меня переменная sql содержит в себе запрос с нужными мне данными:

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