Далее приводится листинг сеанса, в котором эти сценарии запускаются из командной строки, чтобы проиллюстрировать их действие. Большинство файлов содержат функции, которые могут импортироваться и вызываться из других программ — при запуске сценарии просто отображают аргументы командной строки в аргументы функций. Для начала инициализируем тестовую базу данных и загрузим ее таблицу из текстового файла:
…\PP4E\Dbase\Sql> makedb.py testdb
Are you sure?y
database table did not exist made testdb people
…\PP4E\Dbase\Sql> loaddb.py testdb data2.txt
3 rows loaded
Затем проверим результат наших действий с помощью утилиты вывода (используйте аргумент -, чтобы обеспечить форматированный вывод):
…\PP4E\Dbase\Sql> dumpdb.py testdb
(‘bob’, ‘developer’, 80000)
(‘sue’, ‘music’, 90000)
(‘ann’, ‘manager’, 80000)
…\PP4E\Dbase\Sql> dumpdb.py testdb —
3 records pay => 80000 job => developer name => bob pay => 90000 job => music name => sue pay => 80000 job => manager name => ann
Сценарий производит исчерпывающий вывод — чтобы просмотреть определенные записи, передайте сценарию строку запроса в командной строке (следующие командные строки были разбиты, чтобы уместить их по ширине страницы):
…\PP4E\Dbase\Sql> querydb.py testdb
"select name, job from people where pay = 80000"
2 records
job => developer name => bob job => manager name => ann
…\PP4E\Dbase\Sql> querydb.py testdb
"select * from people where name = ‘sue’"
1 records pay => 90000 job => music name => sue
Теперь очистим базу данных и вновь наполним ее данными из файла. Сценарий очистки стирает все записи, но он не выполняет полную инициализацию базы данных:
…\PP4E\Dbase\Sql> cleardb.py testdb Are you sure?y
…\PP4E\Dbase\Sql> dumpdb.py testdb — 0 records
…\PP4E\Dbase\Sql> loaddb.py testdb data.txt 5 rows loaded
…\PP4E\Dbase\Sql> dumpdb.py testdb
(‘bob’, ‘devel’, 50000)
(‘sue’, ‘music’, 60000)
(‘ann’, ‘devel’, 40000)
(‘tim‘, ‘admin‘, 30000)
(‘kim‘, ‘devel‘, 60000)
В заключение ниже приводится пример выполнения трех запросов с этими новыми данными: они отбирают имена разработчиков, должности с зарплатой выше определенного уровня и записи с уровнем зарплаты выше заданного уровня, отсортированные по должности. Разумеется, эти операции можно было бы выполнить в интерактивном сеансе Python, но здесь мы бесплатно получаем в свое распоряжение значительную часть настроек и типового программного кода:
…\PP4E\Dbase\Sql> querydb.py testdb
"select name from people where job = ‘devel’"
3 records
name => bob
name => ann
name => kim
…\PP4E\Dbase\Sql> querydb.py testdb
"select job from people where pay >= 60000"
2 records
job => music
job => devel
…\PP4E\Dbase\Sql> querydb.py testdb
"select * from people where pay >= 60000 order by job"
2 records
pay => 60000 job => devel
name => kim pay => 60000 job => music name => sue
Прежде чем двинуться дальше, немного дополнительной информации: сценарии в этом разделе иллюстрируют преимущества повторного использования программного кода, соответствуют поставленной цели (хотя бы частично представляют интерфейс баз данных) и служат моделью готовых утилит для работы с базами данных. Но они все еще не настолько универсальны, насколько могли бы быть. Например, поддержка сортировки могла бы быть полезным расширением сценария вывода. Мы могли бы обобщить эти сценарии еще больше, добавив поддержку дополнительных возможностей, тем не менее, рано или поздно нам может потребоваться вернуться к вводу команд SQL на стороне клиента — отчасти потому, что SQL является языком и должен поддерживать достаточный уровень общности. Дальнейшее расширение этих сценариев я оставляю в качестве самостоятельного упражнения. Изменяйте их реализацию по своему усмотрению, в конце концов, это — Python.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011