r4khic
@r4khic
Начинающий кодер на python

Как правильно форматировать SQL запрос в python?

До начала цикла есть такие переменные:
sql = '''INSERT INTO items (res_id, log_id, link, title, content, n_date, nd_date, s_date, not_date) VALUES'''
    values = " "

Потом идет в цикле конкатенация sql+values:
for resource_link in resources_links:
values +=  ''',('%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 += values

Данные выходят в таком формате
INSERT INTO items (res_id, log_id, link, title, content, n_date, nd_date, s_date, not_date) VALUES ,('35', '1', 'bryansk-news.net/politics/2019/10/07/37459.html', 'Губернатор Брянщины Александр Богомаз поздравил Владимира Путина с 67-летием', 'Губернатор Брянщины Александр Богомаз поздравил Владимира Путина с 67-летием
Сегодня, 11:56
| Политика
Сегодня, 7 октября, президент России Владимир Путин празднует своё 67-летие. В числе тех, кто поздравил главу государства с днём рождения, числится и губернатор Брянской области Александр Богомаз.
На своей официальной странице ВКонтакте он пожелал Владимиру Владимировичу здоровья, благополучия, неиссякаемой энергии и сил, направленных на дальнейшее развитие и укрепление нашей страны.
Также Александр Богомаз отметил, что, по его мнению, Владимир Путин вывел Россию на ведущие мировые позиции по многим направлениям.
Прочный фундамент, созданный Владимиром Владимировичем за годы его руководства страной, позволяет уверенно смотреть в будущее ,– подытожил Богомаз.
Источник: bo32.ru
', 'Added by Raha', '1570417019', '1570448843.8059158', '2019-10-07')
INSERT INTO items (res_id, log_id, link, title, content, n_date, nd_date, s_date, not_date) VALUES ,('35', '1', 'bryansk-news.net/politics/2019/10/07/37459.html', 'Губернатор Брянщины Александр Богомаз поздравил Владимира Путина с 67-летием', 'Губернатор Брянщины Александр Богомаз поздравил Владимира Путина с 67-летием
Сегодня, 11:56
| Политика
Сегодня, 7 октября, президент России Владимир Путин празднует своё 67-летие. В числе тех, кто поздравил главу государства с днём рождения, числится и губернатор Брянской области Александр Богомаз.
На своей официальной странице ВКонтакте он пожелал Владимиру Владимировичу здоровья, благополучия, неиссякаемой энергии и сил, направленных на дальнейшее развитие и укрепление нашей страны.
Также Александр Богомаз отметил, что, по его мнению, Владимир Путин вывел Россию на ведущие мировые позиции по многим направлениям.
Прочный фундамент, созданный Владимиром Владимировичем за годы его руководства страной, позволяет уверенно смотреть в будущее ,– подытожил Богомаз.
Источник: bo32.ru
', 'Added by Raha', '1570417019', '1570448843.8059158', '2019-10-07')

А мне надо чтобы данные были в такие:
INSERT INTO items (res_id, log_id, link, title, content, n_date, nd_date, s_date, not_date) VALUES ,('35', '1', 'bryansk-news.net/politics/2019/10/07/37459.html', 'Губернатор Брянщины Александр Богомаз поздравил Владимира Путина с 67-летием', 'Губернатор Брянщины Александр Богомаз поздравил Владимира Путина с 67-летием
Сегодня, 11:56
| Политика
Сегодня, 7 октября, президент России Владимир Путин празднует своё 67-летие. В числе тех, кто поздравил главу государства с днём рождения, числится и губернатор Брянской области Александр Богомаз.
На своей официальной странице ВКонтакте он пожелал Владимиру Владимировичу здоровья, благополучия, неиссякаемой энергии и сил, направленных на дальнейшее развитие и укрепление нашей страны.
Также Александр Богомаз отметил, что, по его мнению, Владимир Путин вывел Россию на ведущие мировые позиции по многим направлениям.
Прочный фундамент, созданный Владимиром Владимировичем за годы его руководства страной, позволяет уверенно смотреть в будущее ,– подытожил Богомаз.
Источник: bo32.ru
', 'Added by Raha', '1570417019', '1570448843.8059158', '2019-10-07')
,('35', '1', 'bryansk-news.net/politics/2019/10/07/37459.html', 'Губернатор Брянщины Александр Богомаз поздравил Владимира Путина с 67-летием', 'Губернатор Брянщины Александр Богомаз поздравил Владимира Путина с 67-летием
Сегодня, 11:56
| Политика
Сегодня, 7 октября, президент России Владимир Путин празднует своё 67-летие. В числе тех, кто поздравил главу государства с днём рождения, числится и губернатор Брянской области Александр Богомаз.
На своей официальной странице ВКонтакте он пожелал Владимиру Владимировичу здоровья, благополучия, неиссякаемой энергии и сил, направленных на дальнейшее развитие и укрепление нашей страны.
Также Александр Богомаз отметил, что, по его мнению, Владимир Путин вывел Россию на ведущие мировые позиции по многим направлениям.
Прочный фундамент, созданный Владимиром Владимировичем за годы его руководства страной, позволяет уверенно смотреть в будущее ,– подытожил Богомаз.
Источник: bo32.ru
', 'Added by Raha', '1570417019', '1570448843.8059158', '2019-10-07')

Отличие первого варианта от второго в том что,в первом варианте INSERT INTO и VALUES присутствует 2 раза.А во втором INSERT INTO и VALUES присутствует всего 1 раз.
Как это можно сделать?
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
Winsik
@Winsik
сис.админ, недопрограммист :)
sql += values это надо вынести из цикла и всё
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@o5a
Я еще в прошлом похожем вопросе предлагал для массовой вставки использовать executemany, а не городить портянку из множества строк данных. Будет удобнее. В цикле вместо большой строки формируете вложенный массив из своих данных, а затем массово вставляете в таблицу через executemany. Выглядеть будет примерно так:
# единственная команда sql
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)'''
# в цикле набираем массив данных
items_data = []
for resource_link in resources_links:
    items_data.append((res_id,
                 log_id,
                 str(resource_link),
                 str(item_title),
                 str(item_content),
                 str(n_date),
                 nd_date,
                 s_date,
                 not_date))
# исполнение курсора с массовой вставкой
cursor.executemany(sql, items_data)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы