Задавайте вопросы, мы ответим
Вы не зашли.
Приветствую.
не подскажете?
Есть python скрипт который активно общается с БД mysql. В скрипте есть цикл который генерит следующий sql запрос:
insert into diff (serverid, ipsw, port, idsw) values ("2" , "10.90.0.5", "19", "20");
Дело в том за один цикл меняется только значение ports (это диапозон цифр от 1 до 10 или 1 до 26 или от 1 до 28) все остальное же в пределах одного цикла не меняется. То есть на выходе имеем
1 | 10.90.0.2 | 1 | | | NULL | | 0 | | 1 | | 1 | 10.90.0.2 | 2 | | | NULL | | 0 | | 1 | | 1 | 10.90.0.2 | 3 | | | NULL | | 0 | | 1 | | 1 | 10.90.0.2 | 4 | | | NULL | | 0 | | 1 | | 1 | 10.90.0.2 | 5 | | | NULL | | 0 | | 1 | | 1 | 10.90.0.2 | 6 | | | NULL | | 0 | | 1 | | 1 | 10.90.0.2 | 7 | | | NULL | | 0 | | 1 | | 1 | 10.90.0.2 | 8 | | | NULL | | 0 | | 1 | | 1 | 10.90.0.2 | 9 | | | NULL | | 0 | | 1 | | 1 | 10.90.0.2 | 10 | | | NULL | | 0 | | 1 | | 1 | 10.90.0.2 | 11 | | | NULL | | 0 | | 1 | ... | 1 | 10.90.0.2 | 25 | | | NULL | | 0 | | 1 | | 1 | 10.90.0.2 | 26 | | | NULL | | 0 | | 1 |
Вопрос нельзя ли как то это все запихнуть в один запрос.
Фантазируя:
insert into diff (serverid, ipsw, port, idsw) values ("2" , "10.90.0.5", [1-26], "20");
Ps Сразу скажу что sql знаю лишь в прикладной манере... То есть когда надо использую справочник и google. По сему если возможно особо не пинать.
Неактивен
Здравствуйте. Циклов в MySQL нету. Но можно создать пользовательскую функцию, в которой этот цикл (через loop) и организовать. Вот здесь пример функции - она другое делает, но цикл там тоже есть.
Неактивен
insert into diff (serverid, ipsw, port, idsw) values ("2" , "10.90.0.5", 1, "20"),("2" , "10.90.0.5", 2, "20"),...,("2" , "10.90.0.5", 26, "20");
А какой тип данных вы используете для хранения serverid? Если числовой, то зачем передавать значение как строку?
Неактивен
Прежде всего спасибо Вам за ответ.
deadka написал:
... Но можно создать пользовательскую функцию, в которой этот цикл (через loop) и организовать.
Спасибо. Просмотрел глазами, положил в закладки, интересно. Одно я не уверен что такой подход приемлем в моем случае.
Первоначальная задача состоит в уменьшении времени работы питоновского скрипта путем уменьшением количества запросов к sql, Более менее прозрачным (преемственным) способом.
vasya написал:
А какой тип данных вы используете для хранения serverid? Если числовой, то зачем передавать значение как строку?
Да вот именно это я искал спасибо, Работа скрипта уменьшилась ~ 13 раз!!!
Спасибо большое!!!
Для serverid используется int(5). Ну дело в том что значение serverid я получаю из другой БД, забирая одним массивом все данные а там и числа и строки. Можно конечно когда массив парсится перевести числовые в int но смысл? Дополнительное действие.
Неактивен
soln написал:
Для serverid используется int(5). Ну дело в том что значение serverid я получаю из другой БД, забирая одним массивом все данные а там и числа и строки. Можно конечно когда массив парсится перевести числовые в int но смысл? Дополнительное действие.
Дурной тон
В данном случае это действие производит база. И для базы это большие затраты, даже в лучшем случае ей ещё предупреждения писать (а если ещё учесть что работа базы и так, как правило, самое узкое место...). Кроме того работа вашего скрипта становится зависимой от настроек базы.
Неактивен
vasya написал:
Дурной тон
В данном случае это действие производит база. И для базы это большие затраты, даже в лучшем случае ей ещё предупреждения писать (а если ещё учесть что работа базы и так, как правило, самое узкое место...). Кроме того работа вашего скрипта становится зависимой от настроек базы.
Спасибо за Ваши советы.
Вас понял поправлю. Как с текучкой разберусь.
Неактивен