Доступ к базе данных SQLite из Python
Модуль sqlite3, входит в состав стандартной библиотеки Python, начиная с версии 2.5, и в дополнительной установке не нуждается. Если необходимо получить доступ к SQLite в предыдущих версиях Python, то следует воспользоваться модулем pysqlite. Этот модуль не входит в состав стандартной библиотеки, поэтому его придется устанавливать отдельно.
Для работы с базами данных в языке Python существует единый интерфейс доступа. Все разработчики модулей, осуществляющих связь базы данных с Python, должны придерживаться спецификации DB-API (DataBase Application Program Interface). Это спецификация более интересна для разработчиков модулей, чем для прикладных программистов, поэтому мы не будем ее подробно рассматривать.
Модуль sqlite3 поддерживает спецификацию DB-API 2.0, а так же предоставляет некоторые нестандартные возможности. Поэтому, изучив методы и атрибуты этого модуля, вы получите достаточно подробное представление о спецификации DB API 2.0 и сможете в дальнейшем работать с другой базой данных. Получить номер спецификации, поддерживаемой модулем, можно с помощью атрибута apilevel:
Создание базы данных SQLite в Python
Попробуем создать новую базу данных в SQLite. Запускаем командную строку. Для этого в меню Пуск выбираем пункт Выполнить. В открывшемся окне набираем команду cmd и нажимаем кнопку ОК. Откроется черное окно, в котором будет приглашение для ввода команд. Переходим в папку C:\book, выполнив команду:
cd C:\book
В командной строке должно быть приглашение:
C:\book
По умолчанию в консоли используется кодировка cp866. Чтобы сменить кодировку на cp1251, в командной строке вводим команду:
chcp 1251
Модуль shelve в Python - сохранение объектов в файл
Модуль shelve Python позволяет сохранять объекты под определенный ключом (задается в виде строки) и определяется интерфейс доступа, сходный со словарями. Для сериализации объекта используется возможности модуля pickle, а чтобы записать получившуюся строку по ключу в файл , применяется модуль anydbm. Все эти действия модуль shelve производит незаметно для нас. Чтобы открыть файл с базой объектов, используется функция open(). Функция имеет следующий формат:
open(<Путь к файлу>[, flag="c"[, protocol=None[, writeback=False]]])
В необязательном параметре flag можно указать один из режимов открытия файла:
- r - Только для чтения
- w - чтение и запись
- c - чтение и запись (значение по умолчанию). Если файл не существует, он будет создан.
- n - чтение и запись. Если файл не существует, он будет создан. Если файл существует, он будет перезаписан.
Функция open() возвращает объект, с помощью которого производится дальнейшая работа с базой данных. Этот объект имеет следующие методы:
close() - закрывает файл с базой данных. В качестве примера создадим файл и сохран6им в нем список кортежа.
>>> import shelve
>>> db = shelve.open("file2.txt")
>>> db['language'] = ['ru', 'rn', 'ua']
>>> db['colors'] = ['red', 'blue', 'green']
>>> db['language'], db['colors']
(['ru', 'rn', 'ua'], ['red', 'blue', 'green'])
>>> db.close()
Далее...
Сохранение объектов в файл - Модуль pickle Python
Сохранить объекты в файл и в дальнейшем восстановить объекты из файла позволяют модули pickle и shelve. Модуль pickle предоставляет следующие функции:
dump(<Объект>, <Файл>[, <Протокол>]) - производит сериализацию объекта и записывает данные в указанный файл. В параметре <Файл> указывается файловый объект, открытый для записи. Ниже продемонстрирован способ сохранения объекта в файл.
>>> import pickle
>>> f = open(r'file.txt', 'wb')
>>> obj = ["Строка", (2, 3)]
>>> pickle.dump(obj, f)
>>> f.close()
load(<Файл>) - читает сохраненные данные из файла и преобразует их в объект. В параметре <Файл> указывается файловой объект, открытый для чтения. Пример восстановления объекта из файла.
Joxi - как делать скриншоты?
Вы запечатлели какой-нибудь потрясающий скриншот и собираетесь его отправить своему другу через всемирную паутину? Ну что же, тогда представляем вашему вниманию такую полезную штуку, как Joxi. Основная его польза заключается в том, что с ним может вполне справиться даже ребенок. Joxi также выделяется своим стильным и современным дизайном, что неоднократно будет радовать ваш взор.
Для того, чтобы ускорить передачу ваших скриншотов или других важных файлов, возможен вход в популярные социальные сети, среди которых ВКонтакте и Facebook. На форумах и других сайтах эти фотографии также могут появиться посредствам удобной вставки специального кода. Словом, сервис Joxi предоставит вам максимум возможностей, которыми можно будет управлять при помощи минимальных усилий.
Как защитить Python-код от модификации?
Многие задаются вопросом - как скрыть исходный код написанных на питоне скриптов, чтобы затем можно было например продавать эти скрипты. В своё время и мы задались этим вопросом, в следствии чего со временем нашли его решение.
Можно было бы просто отдавать клиентам байт-код, который создает python при первом запуске скрипта. Например, запустили test.py, рядом появился test.pyc, его и продаем. Однако в сети есть скрипты, которые восстанавливают из него исходный код с точностью до байта.
Поэтому, чтобы закрыть сорцы скрипта - его надо скомпилировать. Для этого, с помощью расширения cython его можно перевести в Си код, который и скомпилировать обычными инструментами, вроде make.
Рассмотрим решение пошагово:
- Конвертируем python-скрипт в Си:cython -3 СКРИПТ.py
Получаем СКРИПТ.c - это исходный код python-модуля, который выполняет то же самое что и питон-скрипт.
Права доступа к файлам и каталогам
В операционной системе Unix для каждого объекта (файла или каталога) назначаются права доступа для каждой разновидности пользователей - владельца, группы и прочих. Могут быть назначены следующие права доступа: чтение, запись, выполнение.
Права доступа обозначаются буквами:
r - файл можно читать, а содержимое каталога можно просматривать.w - файл можно модифицировать, удалить и переименовать, а в каталоге можно создать или удалить файлы. Каталог можно переименовать или удалить.
x - файл можно выполнить, а в каталоге можно выполнить операции над файлами, в том числе производить поиск файлов в нем.
Права доступа к файлу определяются записью типа:
-rw-r--r--Сервер HP ProLiant DL160 Gen8
Недавно столкнулся с задачей обеспечить клиента сервером с большим объемом RAM, но с ограниченным количеством дисков. По техническому заданию сервер должен быть способным передавать в Интернет данные со скоростью 10-15 Гбит в секунду. Раньше для этой цели мы покупали сервера HP DL180 G6, имеющий размер 2U и 25 под HDD/SSD. Но сейчас задача стояла немного другая, и мы решили испытать новый HP Proliant DL 160, 8-го поколения.
Некоторые данные о HP DL 160 G8:
- 24 слота для памяти DDR III;
- 8 × 2,5” HDD/SSD;
- поддержка до 384 Гб RAM;
- контроллер новой модели Р420 – 1 Гб памяти и BBU;
- возможность добавления дополнительного NIC-модуля, не занимая при этом слота PCLe (к примеру, с портами 10 Гбит/сек);
- полно размерный слот PCLe X16.
Методы для работы со словарями в Python
Для работы со словарями предназначены следующие методы:
keys() и values() - позволяют получить список всех ключей и значений соответственно:
>>> d = {'a': 1, 'b': 2}
>>> k = d.keys(); v = d.values()
>>> print k, v
['a', 'b'] [1, 2]
Можно также воспользоваться методами iterkeys() и itervalues(), которые возвращают не список ключей и значений, а итератор. Пример:
>>> d = {'a': 1, 'b': 2}
>>> for i in d.iterkeys(): print i,
a b
>>> for i in d.itervalues(): print i,
1 2
Перебор элементов словаря dict() в Python
Перебрать все элементы списка можно благодаря циклу for, но словари Python не являются последовательностями. В качестве примера выведем элементы словаря двумя методами. Первый способ использует метод keys(), возвращающий список всех ключей словаря. Второй способ появился в последних реализах Python. В этом случае мы просто указываем словарь в качестве параметра. На каждой интерации цикла будет возвращаться ключ, с помощью которого внутри цикла можно получить значение, соответствующее этому ключу.
Перебор элементов словаря
# -*- coding: utf-8 -*-
cars = {
'BMW': 'x5',
'Mercedes-Benz': 'E220',
'Audi': 'Q7'
}
for key in cars:
print "%s -> %s" % (key, cars[key])
print '-' * 15
print 'Пример 2'
print '-' * 15
for key in cars.keys():
print "%s -> %s" % (key, cars[key])