Теперь можно наполнить таблицы значениями. Следует начать с расшифровки числовых значений для дней недели:
weekdays = ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"]
import sqlite as db
c = db.connect(database="tvprogram") cu = c.cursor() cu.execute("""DELETE FROM wd;""") cu.executemany("""INSERT INTO wd VALUES (%s, %s);""", enumerate(weekdays)) c.commit() c.close()
Стоит напомнить, что встроенная функция enumerate() создает список пар номер-значение, например:
>>> print [i for i in enumerate(['a', 'b', 'c'])] [(0, 'a'), (1, 'b'), (2, 'c')]
Из приведенного примера ясно, что метод executemany() объекта-курсора использует второй параметр - последовательность - для массового ввода данных с помощью SQL-инструкции INSERT.
Предположим, что телепрограмма задана в файле tv.csv в формате CSV (он уже обсуждался):
10.02.2003 9.00|ОРТ|Новости|Новости|9.15 10.02.2003 9.15|ОРТ|"НЕЖНЫЙ ЯД"|Сериал|10.15 10.02.2003 10.15|ОРТ|"Маски-шоу"|Юмористическая программа|10.45 10.02.2003 10.45|ОРТ|"Человек и закон"||11.30 10.02.2003 11.30|ОРТ|"НОВЫЕ ПРИКЛЮЧЕНИЯ СИНДБАДА"|Сериал|12.00
Следующая программа разбирает CSV-файл и записывает данные в таблицу tv:
import calendar, csv import sqlite as db from sqlite.main import Time, Date ## Только для db.Date, db.Time = Date, Time ## sqlite
c = db.connect(database="tvprogram") cu = c.cursor()
input_file = open("tv.csv", "rb") rdr = csv.DictReader(input_file, fieldnames=['begt', 'channel', 'prname', 'prgenre', 'endt']) for rec in rdr: bd, bt = rec['begt'].split() bdd, bdm, bdy = map(int, bd.split('.')) bth, btm = map(int, bt.split('.')) eth, etm = map(int, rec['endt'].split('.')) rec['wd'] = calendar.weekday(bdy, bdm, bdd) rec['begd'] = db.Date(bdy, bdm, bdd) rec['begt'] = db.Time(bth, btm, 0) rec['endt'] = db.Time(eth, etm, 0)