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>