Ключевые моменты
- Основные команды и операции
- Типы данных SQL
- Выполнение SQL-запросов в программах Python
- Несколько таблиц
- Атака SQL-инъекцией
Назначение: Дома
import.py
Спецификация:
Напишите программу, которая импортирует данные из электронной таблицы CSV. Для каждого учащегося в файле CSV вставьте учащегося в таблицу
students
в базе данныхstudents.db
.
В предоставленном вам CSV-файле есть только столбец
name
, а в базе данных есть отдельные столбцы для именfirst
,middle
иlast
. Таким образом, вы захотите сначала проанализировать каждое имя и разделить его на имя, отчество и фамилию. Для учащихся без отчества в поле имениmiddle
следует оставить значениеNULL
в таблице.
При чтении CSV-файла с помощью DictReader
каждая строка будет преобразована в словарь, где имена столбцов будут ключами, а соответствующие им значения — значениями.
{‘name’: ‘Adelaide Murton’, ‘house’: ‘Slytherin’, ‘birth’: ‘1982’}
Следующий сценарий напрямую обрабатывает данные в словаре.
row[“name”] = row[“name”].split()
превращает каждую строку имени в массив имени, среднего имени (если существует) и фамилии.
{‘name’: [‘Adelaide’, ‘Murton’], ‘house’: ‘Slytherin’, ‘birth’: ‘1982’}
Для тех учащихся, у которых нет отчества, их столбец отчества должен иметь значение NULL в таблице.
if len(row[“name”]) == 2:
row[“name”].insert(1, None)
И теперь их данные будут выглядеть так:
{‘name’: [‘Adelaide’, None, ‘Murton’], ‘house’: ‘Slytherin’, ‘birth’: ‘1982’}
db.execute
вставить данные в базу данных с помощью команды запроса(“INSERT INTO students (first, middle, last, house, birth) VALUES(?, ?, ?, ?, ?)”, name[0], name[1], name[2], house, birth)
. Знаки вопроса ?
в круглых скобках являются заполнителями для следующих переменных.
список.py
Спецификация:
Напишите программу, которая запрашивает таблицу
students
в базе данныхstudents.db
для всех студентов в указанном доме.
Затем ваша программа должна распечатать полное имя и год рождения каждого учащегося (в формате, например,
Harry James Potter, born 1980
илиLuna Lovegood, born 1981
). Студенты должны быть упорядочены по фамилии. Для учащихся с одинаковой фамилией они должны быть упорядочены по имени.
С помощью db.execute(“SELECT first, middle, last, birth FROM students WHERE house = ? ORDER BY last, first”, argv[1])
эта программа извлекает имя, отчество, фамилию и год рождения студентов, принадлежащих определенному пользователю дома, введенному в командной строке. Данные упорядочены по фамилии и имени, если они имеют одинаковую фамилию.