Ключевые моменты

  • Основные команды и операции
  • Типы данных 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]) эта программа извлекает имя, отчество, фамилию и год рождения студентов, принадлежащих определенному пользователю дома, введенному в командной строке. Данные упорядочены по фамилии и имени, если они имеют одинаковую фамилию.