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

>>>> import sqlalchemy as sa

Соединимся с базой данных и создадим хранилище в памяти (строка аргументов 'sqlite:///:memory: ' также сработает):

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

Создадим таблицу, которая называется zoo и содержит три графы:

>>>> conn.execute('''CREATE TABLE zoo

>…·····(critter VARCHAR(20) PRIMARY KEY,

>…······count INT,

>…······damages FLOAT)''')

>

Вызов conn.execute() возвращает объект SQLAlchemy, который называется ResultProxy. Скоро вы увидите, что с ним можно сделать.

Кстати, если вы раньше никогда не создавали базы данных, примите мои поздравления. Можете вычеркнуть этот пункт из своего списка дел, которые обязательно нужно реализовать в жизни.

Далее вставьте три набора данных в новую пустую таблицу:

>>>> ins = 'INSERT INTO zoo (critter, count, damages) VALUES (???)'

>>>> conn.execute(ins, 'duck', 10, 0.0)

>

>>>> conn.execute(ins, 'bear', 2, 1000.0)

>

>>>> conn.execute(ins, 'weasel', 1, 2000.0)

>

Далее сделайте выборку того, что только что разместили в базе:

>>>> rows = conn.execute('SELECT * FROM zoo')

В SQLAlchemy rows не является списком — это специальный объект ResultProxy, который мы не можем отобразить непосредственно:

>>>> print(rows)

>

Однако вы можете итерировать по нему, как по списку, и получать по одному ряду за раз:

>>>> for row in rows:

>…·····print(row)

>…

>('duck', 10, 0.0)

>('bear', 2, 1000.0)

>('weasel', 1, 2000.0)

Этот пример очень похож на другой, где использовался SQLite DB-API. Единственное преимущество этого подхода заключается в том, что нам не нужно импортировать драйвер — SQLAlchemy сам определил драйвер на основе строки соединения. Простое изменение строки соединения позволит перенести этот код на базу данных другого типа. Еще один плюс SQLAlchemy заключается в наличии пула соединений, о котором вы можете прочитать на сайте http://bit.ly/conn-pooling, содержащем документацию.

Язык выражений SQL

Следующий уровень SQLAlchemy — это язык выражений SQL. Он предоставляет функции, которые позволяют создать SQL для разных операций. Язык выражений обрабатывает большее количество различий в диалектах, чем низкоуровневый слой движка. Он может оказаться полезным промежуточным решением для приложений, работающих с реляционными базами данных.

Рассмотрим создание и наполнение таблицы zoo. Вновь все последующие фрагменты принадлежат одной программе.