Очистка данных

Архив WebclubТехнологии2008

Публикация прежнего Webclub · 2008 год. Примеры и сведения сохранены в историческом контексте.

Легко заметить, что далеко не все полученные данные подходят для загрузки на SQL сервер. Например, дата должна быть в формате, "понятном" серверу. Не говоря уже о том, что bytes и status могут и не быть числами, тогда как в базе данных для них имеет смысл завести поля типа integer (для последующего суммирования).

Разберемся сначала с датой. Определим словарь с порядковыми номерами месяцев. Он нам будет нужен в дальнейшем:

 

month = {'Jan' : 1, 'Feb' : 2, 'Mar' : 3, 'Apr' : 4, 'May' : 5, 'Jun' : 6, 'Jul' : 7, 'Aug' : 8, 'Sep' : 9, 'Oct' : 10, 'Nov' : 11, 'Dec' : 12}

>>>> #разделяем на день, часы, минуты, секунды
...
>>>> datetime = date[1:].split(':')
>>>> datetime
['13/Sep/2002', '14', '19', '58']

В принципе, день можно оставить как есть. MS SQL Server понимает такой формат. Тогда окончательная дата будет:

 

 sql_date = '%s %s:%s:%s' % (datetime[0], datetime[1], datetime[2], datetime[3])
>>>> sql_date
'13/Sep/2002 14:19:58'

Можно определить другой формат, например:

 

 #получаем день, месяц, год
...
>>>> day = datetime[0].split('/')
>>>> day
['13', 'Sep', '2002']
>>>> #теперь конструируем дату
...
>>>> sql_date = '%s-%s-%s %s:%s:%s' % (day[2], month[day[1]], day[0], datetime[1], datetime[2], datet
ime[3])
>>>> sql_date
'2002-9-13 14:19:58'

Теперь проверим, действительно ли bytes и status содержат целые числа. Это лучше всего сделать с помощью конструкции try/except:


try:
    bytes = int(bytes)
except:
    bytes = 0

Еще одна проблема может возникнуть с содержанием запроса клиента. Дело в том, что строка запроса может быть очень длинной (например, при попытке взлома веб-сервера злоумышленник может сформировать такую строку, пытаясь воспользоваться уязвимостью переполнения буфера). Имеет смысл ограничить ее разумной величиной, например 256 символов:


if len(user_request) > 255:
    user_request = user_request[:255]

Конечно, если вы хотите анализировать попытки взлома и некорректные запросы, нужно оставить все как есть, задав соответствующему полю таблицы нужный формат.


Ещё из архива

Архив клуба
веб-разработчиков

HTML, CSS, программирование и история интернета. Публикации прежнего Webclub по своим адресам.

Открыть архив
Сайт на ноутбуке и телефоне