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