Чтение онлайн

на главную - закладки

Жанры

Язык программирования Python
Шрифт:

0 Воскресенье

1 Понедельник

2 Вторник

3 Среда

4 Четверг

5 Пятница

6 Суббота

7 Воскресенье

Несложно догадаться, как сделать выборку телепрограммы:

Листинг

import sqlite as db

c = db.connect(database=«tvprogram»)

cu = c.cursor

cu.execute("""

SELECT tvdate, tvtime1, wd.wdname, tvchannel, prname, prgenre

FROM tv, wd

WHERE wd.weekday = tvweekday

ORDER BY tvdate, tvtime1;""")

for rec in cu.fetchall:

dt = rec[0] + rec[1]

weekday = rec[2]

channel = rec[3]

name = rec[4]

genre = rec[5]

print "%s, %02i.%02i.%04i %s %02i:%02i %s (%s)» % (

weekday, dt.day, dt.month, dt.year, channel,

dt.hour, dt.minute, name, genre)

В этом примере в качестве типа для даты и времени используется тип из mx.DateTime. Именно поэтому стало возможным получить год, месяц, день, час и минуту обращением к атрибуту. Кстати, datetime–объект стандартного модуля datetime имеет те же атрибуты. В общем случае для даты и времени может использоваться другой тип, поэтому если получаемые из базы даты будут проходить более глубокую обработку, их следует переводить во внутреннее представление сразу после получения по запросу. Тем самым тип даты из модуля DB–API не будет влиять на другие части программы.

Другие СУБД и Python

Модуль sqlite дает прекрасные возможности для построения небольших и быстрых баз данных, однако для полноты изложения предлагается обзор модулей расширения Python для других СУБД.

Выше везде импортировался модуль sqlite, с изменением его имени на db. Это было сделано не случайно. Дело в том, что подобные модули, поддерживающие DB–API 2.0, есть и для других СУБД, и даже не в единственном числе. Согласно информации на сайте www.python.org DB–API 2.0–совместимые модули для Python имеют следующие СУБД или протоколы доступа к БД:

zxJDBC Доступ по JDBC.

MySQL Для СУБД MySQL.

mxODBC Доступ по ODBC, продается фирмой eGenix .

DCOracle2, cx_Oracle Для СУБД Oracle.

PyGresQL, psycopg, pyPgSQL Для СУБД PostgreSQL.

Sybase Для Sybase.

sapdbapi Для СУБД SAP.

KInterbasDB Для СУБД Firebird (это потомок Interbase).

PyADO Адаптер к Microsoft ActiveX Data Objects (только под Windows).

Примечание:

Для СУБД PostgreSQL нужно взять не PyGreSQL, а psycopg, так как в первом есть небольшие проблемы с типом для даты и времени при вставке параметров в методе execute. Кроме того, psycopg оптимизирован для скорости и многопоточности (psycopg.threadsafety=2).

Таким образом, в примерах, используемых в этой лекции, вместо sqlite можно применять, например, psycopg: результат должен быть тем же, если, конечно, соответствующий модуль был установлен.

Однако в общем случае при переходе с одной СУБД на другую могут возникать нестыковки, даже, несмотря на поддержку одной версии DB–API. Например, у модулей могут различаться paramstyle. В этом случае придется немного переделать параметры к вызову execute. Могут быть и другие причины, поэтому переход на другую СУБД следует тщательно тестировать.

Иметь интерфейс DB–API могут не только базы данных. Например, разработчики проекта fssdb стремятся построить DB–API 2.0 интерфейс к… файловой системе.

Несмотря на достаточно хорошие теоретические основы и стабильные реализации, реляционная модель — не единственная из успешно используемых сегодня. К примеру, уже рассматривался язык XML и интерфейсы для работы с ним в Python. Древовидная модель данных XML для многих задач является более естественной, и в настоящее время идут исследования, результаты которых позволят работать с XML так же легко и стабильно, как с реляционными СУБД. Язык программирования Python — один из полигонов этих исследований.

Решая конкретную задачу, разработчик программного обеспечения должен сделать выбор средств, наиболее подходящих для решения задачи. Очень многие подходят к этому выбору с предвзятостью, выбирая неоптимальную (для данной задачи или подзадачи) модель данных. В результате данные, которые по своей природе легче представить другой моделью, приходится хранить и обрабатывать в выбранной модели, зачастую невольно моделируя более естественные структуры доступа и хранения. Так, XML можно хранить в реляционной БД, а табличные данные — в XML, однако это неестественно. Из–за этого сложность и подверженность ошибкам программного продукта возрастают, даже если использованные инструменты высокого качества.

Заключение

В рамках данной лекции были рассмотрены возможности связи Python с системами управления реляционными базами данных. Для Python разработан стандарт, называемый DB–API (версия 2.0), которого должны придерживаться все разработчики модулей сопряжения с реляционными базами данных. Благодаря этому API код прикладной программы становится менее зависимым от марки используемой базы данных, его могут понять разработчики, использующие другие базы данных. Фактически DB–API 2.0 описывает имена функций и классов, которые должен содержать модуль сопряжения с базой данных, и их семантику. Модуль сопряжения должен содержать класс объектов–соединений с базой данных и класс для курсоров — специальных объектов, через которые происходит коммуникация с СУБД на прикладном уровне.

Здесь была использована СУБД SQLite и соответствующий модуль расширения Python для сопряжения с этой СУБД — sqlite, так как он поддерживает DB–API 2.0 и достаточно прост в установке. С его помощью были продемонстрированы основные приемы работы с базой данных: создание и наполнение таблиц, выполнение выборок и анализ полученных данных.

В конце лекции дан список других пакетов и модулей, которые позволяют Python–программе работать со многими современными СУБД.

11. Лекция: Многопоточные вычисления.

В этой лекции рассматриваются вопросы взаимодействия потоков (нитей) в рамках одной программы. Вводятся основные понятия (семафоры, очереди, блокировки). Делается попытка объяснить особенности параллельного программирования на основе модели многопоточности.

О потоках управления

В современной операционной системе, даже не выполняющей ничего особенного, могут одновременно работать несколько процессов (processes). Например, при запуске программы запускается новый процесс. Функции для управления процессами можно найти в стандартном модуле os языка Python. Здесь же речь пойдет о потоках.

Поделиться:
Популярные книги

Компас желаний

Кас Маркус
8. Артефактор
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Компас желаний

Технарь

Муравьёв Константин Николаевич
1. Технарь
Фантастика:
космическая фантастика
попаданцы
7.13
рейтинг книги
Технарь

Я до сих пор не князь. Книга XVI

Дрейк Сириус
16. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я до сих пор не князь. Книга XVI

Геном хищника. Книга четвертая

Гарцевич Евгений Александрович
4. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга четвертая

Законы Рода. Том 12

Андрей Мельник
12. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 12

Законы Рода. Том 10

Андрей Мельник
10. Граф Берестьев
Фантастика:
юмористическая фантастика
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 10

Вернуть невесту. Ловушка для попаданки 2

Ардова Алиса
2. Вернуть невесту
Любовные романы:
любовно-фантастические романы
7.88
рейтинг книги
Вернуть невесту. Ловушка для попаданки 2

Локки 7. Потомок бога

Решетов Евгений Валерьевич
7. Локки
Фантастика:
аниме
эпическая фантастика
фэнтези
5.00
рейтинг книги
Локки 7. Потомок бога

Мастер 2

Чащин Валерий
2. Мастер
Фантастика:
фэнтези
городское фэнтези
попаданцы
технофэнтези
4.50
рейтинг книги
Мастер 2

Требую развода! Что значит- вы отказываетесь?

Мамлеева Наталья
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Требую развода! Что значит- вы отказываетесь?

Глава рода

Шелег Дмитрий Витальевич
5. Живой лёд
Фантастика:
боевая фантастика
6.55
рейтинг книги
Глава рода

Сын Тишайшего 3

Яманов Александр
3. Царь Федя
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Сын Тишайшего 3

Гримуар темного лорда III

Грехов Тимофей
3. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар темного лорда III

На границе империй. Том 5

INDIGO
5. Фортуна дама переменчивая
Фантастика:
боевая фантастика
попаданцы
7.50
рейтинг книги
На границе империй. Том 5