Создание базы данных
Для создания базы данных нужно установить, какие таблицы (и другие объекты, например индексы) в ней будут храниться, а также определить структуры таблиц (имена и типы полей).
Задача - создание базы данных, в которой будет храниться телепрограмма. В этой базе будет таблица со следующими полями:
- tvdate,
- tvweekday,
- tvchannel,
- tvtime1,
- tvtime2,
- prname,
- prgenre.
Здесь tvdate - дата, tvchannel - канал, tvtime1 и tvtime2 - время начала и конца передачи, prname - название, prgenre - жанр. Конечно, в этой таблице есть функциональная зависимость (tvweekday вычисляется на основе tvdate и tvtime1), но из практических соображений БД к нормальным формам приводиться не будет. Кроме того, таблица будет создана с названиями дней недели (устанавливает соответствие между номером дня и днем недели):
- weekday,
- wdname.
Следующий сценарий создаст таблицу в базе данных (в случае с SQLite заботиться о создании базы данных не нужно: файл создастся автоматически. Для других баз данных необходимо перед этим создать базу данных, например, SQL-инструкцией CREATE DATABASE):
import sqlite as db
c = db.connect(database="tvprogram") cu = c.cursor()
try: cu.execute(""" CREATE TABLE tv ( tvdate DATE, tvweekday INTEGER, tvchannel VARCHAR(30), tvtime1 TIME, tvtime2 TIME, prname VARCHAR(150), prgenre VARCHAR(40) ); """) except db.DatabaseError, x: print "Ошибка: ", x c.commit()
try: cu.execute(""" CREATE TABLE wd ( weekday INTEGER, wdname VARCHAR(11) ); """) except db.DatabaseError, x: print "Ошибка: ", x c.commit() c.close()
Здесь просто исполняются SQL-инструкции, и обрабатывается ошибка базы данных, если таковая случится (например, при попытке создать таблицу с уже существующим именем). Для того чтобы таблицы создавались независимо, используется commit().
Кстати, удалить таблицы из базы данных можно следующим образом:
import sqlite as db
c = db.connect(database="tvprogram") cu = c.cursor()
try: cu.execute("""DROP TABLE tv;""") except db.DatabaseError, x: print "Ошибка: ", x c.commit()
try: cu.execute("""DROP TABLE wd;""") except db.DatabaseError, x: print "Ошибка: ", x c.commit() c.close()