Простой Python. Современный стиль программирования (Любанович) - страница 139

Импорт остается неизменным, но в этот раз нам нужно кое-что еще:

>>>> import sqlalchemy as sa

>>>> from sqlalchemy.ext.declarative import declarative_base

Вот так создается соединение:

>>>> conn = sa.create_engine('sqlite:///zoo.db')

Теперь мы начинаем работать с SQLAlchemy ORM. Определяем класс Zoo и связываем его атрибуты с графами таблицы:

>>>> Base = declarative_base()

>>>> class Zoo(Base):

>…·····__tablename__ = 'zoo'

>…·····critter = sa.Column('critter', sa.String, primary_key=True)

>…·····count = sa.Column('count', sa.Integer)

>…·····damages = sa.Column('damages', sa.Float)

>…·····def __init__(self, critter, count, damages):

>…·········self.critter = critter

>…·········self.count = count

>…·········self.damages = damages

>…·····def __repr__(self):

>…·········return "".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

>

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

>>>> from sqlalchemy.orm import sessionmaker

>>>> Session = sessionmaker(bind=conn)

>>>> session = Session()

Внутри сессии записываем три созданных нами объекта в базу данных. Функция 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. Стоит ли им пользоваться? Некоторые люди считают, что ORM следует избегать (