Сработало? Файл zoo.db был создан в текущем каталоге. Вы можете использовать программу командной строки sqlite3, чтобы убедиться в этом:
$ sqlite3 zoo.db
SQLite version 3.6.12
Enter".help" for instructions
Enter SQL statements terminated with a";"
sqlite>.tables
zoo
sqlite> select * from zoo;
duck|10|0.0
bear|2|1000.0
weasel|1|2000.0
Цель этого раздела заключается в том, чтобы показать, что такое ORM и как он работает на высоком уровне. Автор SQLAlchemy написал полное руководство к нему (http://bit.ly/obj-rel-tutorial). После прочтения этого раздела определитесь, какой из следующих уровней лучше подходит для ваших нужд:
• простой DB-API, показанный ранее в подразделе «SQLite»;
• движок SQLAlchemy;
• язык выражений SQLAlchemy;
• SQLAlchemy ORM.
Естественным выбором выглядит применение ORM, что позволит избежать всех сложностей SQL. Стоит ли им пользоваться? Некоторые люди считают, что ORM следует избегать (http://bit.ly/obj-rel-map), а другие полагают, что его критикуют незаслуженно (http://bit.ly/fowler-orm). Независимо от того, кто прав, ORM — это абстракция, а все абстракции в какой-то момент разрушаются — они допускают утечки памяти. Если ORM не делает того, что вам нужно, вы должны понять, как он работает, а затем разобраться, как исправить это с помощью SQL. Перефразируя интернет-мем, некоторые люди, столкнувшись с проблемой, думают: «Точно, использую ORM». Теперь у них две проблемы. Старайтесь использовать ORM реже и, как правило, для простых приложений. Но если приложение кажется простым, то вам, возможно, стоит использовать простой SQL (или язык выражений SQL).
Или же вы можете попробовать еще более простой способ — dataset (https://dataset.readthedocs.org/). Он создан на основе SQLAlchemy и предоставляет простой ORM для хранилищ SQL, JSON и CSV.
Хранилища данных NoSQL
Некоторые базы данных не являются реляционными и не поддерживают SQL. Они были созданы для работы с очень крупными наборами данных, позволяют более гибко определять данные и поддерживают пользовательские операции с данными. Такие базы данных называют NoSQL (раньше это означало «не SQL», теперь же расшифровка звучит как «не только SQL»).
Семейство dbm
Форматы dbm существовали задолго до того, как появился
• Вы присваиваете значение ключу, и оно автоматически сохраняется в базе данных на диске.
• Вы можете получить значение с помощью ключа.
Рассмотрим простой пример. Второй аргумент следующего метода open() может принимать значения 'r' для чтения, 'w' для записи и 'c' для того и другого, создавая файл, если его не существует:
>>> import dbm
>>> db = dbm.open('definitions', 'c')
Для того чтобы создать пары «ключ — значение», просто присвойте значение ключу, как если бы вы работали со словарем:
>>> db['mustard'] = 'yellow'
>>> db['ketchup'] = 'red'
>>> db['pesto'] = 'green'
Приостановимся и посмотрим, что мы уже имеем:
>>> len(db)
3
>>> db['pesto']
b'green'
Теперь закроем файл и откроем его снова, чтобы убедиться, что наши данные действительно были сохранены:
>>> db.close()
>>> db = dbm.open('definitions', 'r')
>>> db['mustard']
b'yellow'
Ключи и значения сохраняются как байты. Вы не можете итерировать по объектам базы данных db, но можете получить количество ключей с помощью функции len(). Обратите внимание на то, что функции get() и setdefault() работают точно так же, как и для словарей.
Memcached
memcached (http://memcached.org/) — это быстрый сервер
Существует множество драйверов Python, тот, что работает с Python 3, называется python3-memcached (https://github.com/eguven/python3-memcached), вы можете установить его с помощью этой команды:
$ pip install python-memcached