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

mysql

pymysql

mysql

oursql

postgresql

psycopg2

postgresql

pypostgresql

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

239

Уровень движка

Сначала мы попробуем поработать с самым низким уровнем SQLAlchemy, возмож-

ности которого почти не отличаются от функций DB-API.

Попробуем поработать с SQLite, поскольку его поддержка уже встроена

в Python. Строка соединения для SQLite опускает значения параметров host,

port, user и password. dbname информирует SQLite о том, какой файл использовать для

хранения вашей базы данных. Если вы опустите параметр dbname, SQLite создаст

базу данных в памяти. Если значение параметра dbname начинается со слеша (/),

оно является абсолютным именем файла на вашем компьютере (как в Linux

и OS X). В противном случае оно является относительным именем текущего

каталога.

Следующие сегменты являются частью одной программы, разделенной на части

для удобства объяснения.

Для начала нужно импортировать все, что нам понадобится. Следующая строка

является примером импортирования псевдонима, который позволяет использовать

строку sa для того, чтобы ссылаться на методы SQLAlchemy. Я делаю это в основ-

ном потому, что sa написать гораздо проще, чем sqlalchemy:

>>> 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)''')

<sqlalchemy.engine.result.ResultProxy object at 0x1017efb10>

Вызов conn.execute() возвращает объект SQLAlchemy, который называется

ResultProxy. Скоро вы увидите, что с ним можно сделать.

Кстати, если вы раньше никогда не создавали базы данных, примите мои по-

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

тельно нужно реализовать в жизни.

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

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

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

<sqlalchemy.engine.result.ResultProxy object at 0x1017efb50>

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

<sqlalchemy.engine.result.ResultProxy object at 0x1017ef090>

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

<sqlalchemy.engine.result.ResultProxy object at 0x1017ef450>