Импорт остается неизменным, но в этот раз нам нужно кое-что еще:
>>>> 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 следует избегать (