Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 187

... def __init__(self, critter, count, damages):

... self.critter = critter

... self.count = count

... self.damages = damages

... def __repr__(self):

... return "<Zoo({}, {}, {})>".format(self.critter, self.count, self.damages)

Следующая строка как по волшебству создает базу данных и таблицу:

>>> Base.metadata.create_all(conn)

Вы можете добавить в таблицу данные путем создания объектов Python.

ORM управляет данными изнутри:

>>> first = Zoo('duck', 10, 0.0)

>>> second = Zoo('bear', 2, 1000.0)

>>> third = Zoo('weasel', 1, 2000.0)

>>> first

<Zoo(duck, 10, 0.0)>

Далее мы указываем ORM отвезти нас в страну SQL. Создаем сессию, чтобы

беседовать с базой данных:

>>> from sqlalchemy.orm import sessionmaker

>>> Session = sessionmaker(bind=conn)

>>> session = Session()

Реляционные базы данных

243

Внутри сессии записываем три созданных нами объекта в базу данных. Функция

add() добавляет один объект, а функция add_all() добавляет список:

>>> session.add(first)

>>> session.add_all([second, third])

Наконец, нам нужно завершить сессию:

>>> session.commit()

Сработало? Файл 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. Стоит ли им пользоваться? Некоторые люди считают, что