0 / 0 / 0
Регистрация: 27.06.2015
Сообщений: 26

Python запись в базу данных Mysql

15.12.2016, 16:24. Показов 5122. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем.

Помогите дописать код.
T3:
Внизу код, он работает так, пишет лог в базу.
Но суть в том что он записывает все запросы тем самым заспамливает базу.
Помогите подправить, чтобы он проверял на наличие записи по двум параметрам: (ip, port,).
Если есть запись в базе с этими параметрами чтобы он не писал ее повторно. То есть избавиться от дубликатов.

Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def mysql_logscs(ipcs, portcs):
        timey = datetime.datetime.now().strftime('%Y')
        timem = datetime.datetime.now().strftime('%m')
        timed = datetime.datetime.now().strftime('%d')
        timeh = datetime.datetime.now().strftime('%H')
        timemin = datetime.datetime.now().strftime('%M')
        times = datetime.datetime.now().strftime('%S')
        attempts = 0
        while attempts < 1:
                try:
            host,name,user,password,table = cfg.get("LOG","HOST"),cfg.get("LOG","NAME"),cfg.get("LOG","USER"),cfg.get("LOG","PASSWORD"),cfg.get("LOG","TABLE")
                        db = MySQLdb.connect(host=host,user=user,passwd=password,db=name)
                        c = db.cursor()
                        c.execute("INSERT INTO MS01 (timeyear, timemonth, timeday, timehour, timeminute, timesecond, ip, port, type) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)", (timey, timem, timed, timeh, timemin, times, ipcs, portcs, "cs"))
                        c.close()
            attempts += 1
                except MySQLdb.Error, e:
                        print "Not successfully connected and update log data. Retry to connect...5 Seconds."
                        print "Error: %s" %e
                        time.sleep(5)
        thread.exit()


Пожалуйста по возможности исправите сам код, и напишите готовый образец.

Добавлено через 33 минуты
Ребята немного дополнения.
Не по двум параметрам а по трем: (timeday, ip, port)

Добавлено через 15 часов 11 минут
Есть у кого какие идеи?
Кто поможет, дам соточку на пивко.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.12.2016, 16:24
Ответы с готовыми решениями:

Python pymysql не добавляет в базу данных запись
Добрый день. Такая проблема. Имеется база данных созданная в phpmyadmin. Программа подключается к этой базе данных. У меня получилось...

Запись в базу данных MYSQL
Здравствуйте проблема возникла в том что при записи в таблицу то там вместо текста появляется пустая ячейка , хотя уже перевел QString в...

Запись в Базу данных MySQL
&lt;html&gt; &lt;head&gt; &lt;title&gt;Формы PHP&lt;/title&gt; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt; ...

4
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
16.12.2016, 20:15
если таблица выглядит вот так:

Code
1
2
3
4
5
6
7
8
9
mysql> select * from access_logs;
+----+-------+------------+-------------+------------+
| id | login | ip_address | port_number | time_stamp |
+----+-------+------------+-------------+------------+
|  1 | user1 | 2130706433 |          80 | 1481907621 |
|  2 | user2 | 2130706434 |        8080 | 1481907660 |
|  3 | user3 | 2130706435 |         443 | 1481907667 |
+----+-------+------------+-------------+------------+
3 rows in set (0.00 sec)
то, для того, чтобы нельзя было записать в таблицу строку с уже существующими ip, port и time_stamp, можно создать таблицу c указанием UNIQUE KEY

UNIQUE KEY `uniq_log` (`time_stamp`,`ip_address`,`port_number` )

после этого инсерт будет ругаться на дубликат

Code
1
2
mysql> INSERT INTO access_logs (login, ip_address, port_number, time_stamp) VALUES ('user1', 2130706433, 80, 1481907621);
ERROR 1062 (23000): Duplicate entry '1481907621-2130706433-80' for key 'uniq_log'
и чтобы этого избежать можно вместо INSERT сделать INSERT IGNORE

Code
1
2
mysql> INSERT IGNORE INTO access_logs (login, ip_address, port_number, time_stamp) VALUES ('user1', 2130706433, 80, 1481907621);
Query OK, 0 rows affected, 1 warning (0.01 sec)
Но с моей колокольни это выглядит, как будто Вы пытаетесь лечить симптомы, вместо болезни.
0
0 / 0 / 0
Регистрация: 27.06.2015
Сообщений: 26
16.12.2016, 23:07  [ТС]
Возможно вы не так меня поняли, или я плохо объяснил.

Немного описания:
У меня стоит серверная программа на python, к ней подсоединяются клиенты.
И прога пишет лог в базу каждого соединения. Но есть недоброжелатели, который ддосят сервер.
Они забивают базу по 500к запросов в день. В базе хранятся записи за неделю.
Есть также веб часть, которая показывает статистику. Так вот после таких ддосов, веб часть начинает тормозить.


Так вот в первом посте код python. Который записывает лог соединения в базу.
Мне надо его подправить, чтобы он сперва делал проверку, существует запись или нет, а потом записывал если записи нет.
Мне нужно исправить python код.


Я думаю что это как раз и не симптом, а именно болезнь.

Как выглядит таблица.
Миниатюры
Python запись в базу данных Mysql  
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
16.12.2016, 23:26
Для начала, чтобы база росла не так быстро, можно попробовать оптимизировать архитектуру - например использовать соответствующий тип данных для даты, переделать ip в целое. Потом, если кто-то ломится слишком сильно, возможно стоит не логи редактировать, а определять подобных "недоброжелателей" еще на подлете и закрывать доступ средствами сервера?

Что думаете про индексацию по трем полям, как я сделал выше?
0
0 / 0 / 0
Регистрация: 27.06.2015
Сообщений: 26
17.12.2016, 00:12  [ТС]
Jabbson,

Я забыл уточнить, что я в языке python полный нуль. Ну и mysql тоже.
По этому и выложил код, чтобы его смогли отредактировать.

По поводу что написано выше, это все было бы возможно, если я хоть чутка разбирался.
Сперва хотя бы от дублирующихся записей избавится.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.12.2016, 00:12
Помогаю со студенческими работами здесь

Где ошибка? (Запись данных из массива в базу данных mysql)
Массив, генерирующий данные: $data = array(); for($i = 0; $i &lt; 100; $i++){ $data = array( 'name' ...

Запись объекта в базу данных MySQL
Можно ли как-нибудь записать в базу данных MySQL объект, а потом его восстановить с помощью приведения типа например? Если да, то как?

QT Запись ячейки из qtableview в базу данных mysql
Суть в том, что при выборе строки в поле &quot;Продукция&quot; и нажатии на кнопку &quot;Изготовить&quot; нужно считать ячейку с наименованием из строки и...

[PHP+MySQL] Запись в базу данных из формы
Здравствуйте! Помогите, пожалуйста, решить проблему с записью. В базу строка добавляется, но она пустая. Не могу понять, в чем дело. ...

Запись значения в базу данных, PHP + MySQL
Здравствуйте. Система управления NetCat. Делаю каталог участников выставки. Пока идут плавающие номера (вывожу их через php -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru