Python, введение в БД

    Базы данных


    Здравствуйте, здесь и сейчас я хочу рассказать, что такое базы данных, зачем они нужны, и т.д.; для работы с ними мы будем использовать python и его библиотеку sqlite3.


    База данных - совокупность данных, хранимых в соответствии со схемой данных, манипулирование которыми выполняют в соответствии с правилами средств моделирования данных


    Так нам говорит Яндекс, но если сказать простыми словами, не углубляясь во все эти понятия, то:


    Базы данных (БД) - библиотека, хранящая данные в том или ином виде.


    То есть как в библиотеку мы можем прийти и взять книгу «Война и мир», зная что она будет лежать в разделе романов, на букву «В», так и из БД мы можем взять запись по определённому аргументу, в данном случае жанру.


    И тут возникает вопрос.


    Как это сделать?

    И что бы ответить на этот вопрос, мы должны кое-что узнать.


    Как хранятся данные в базах данных


    Сначала нужно понять, что БД делятся на:


    • Реляционные
    • Сетевые
    • Иерархические

    Сетевые и иерархические БД:

    Такие БД представляют собой графы и хранят информацию в них же.


    • Иерархические — древовидный граф
    • Сетевые — полный граф

    Данные БД здесь мы рассматривать не будем. Поэтому перейдём к реляционной БД.


    Реляционные базы данных

    Реляционные БД - БД, в которых данные хранятся в виде таблицы, например Exel.


    SQL - именно реляционная БД, и все данные в ней хранятся, в виде таблицы. Например такой:





    Я думаю что, на вопрос мы ответили, и можно идти дальше.


    Зачем нужны базы данных?


    За всю жизнь, человечество накопила невероятно много информации, а БД, как мы знаем собирают, и сортирует эту информацию по таблицам (в нашем случае). И БД помогают абсолютно спокойно ориентироваться во всей этой куче информации, добавлять её туда, изменять и т.д.;


    Из теории в практику


    Сейчас мы пойдём в практику, но перед этим хотелось бы уточнить кое-что. Сверху я написал такую строку:


    SQL - именно реляционная БД, и все данные в ней хранятся, в виде таблицы.

    И как вы понимаете, это неверно.
    SQL - это структурированный язык запросов (structured query language). Грубо говоря это язык программирования, позволяющий управлять Базами данных, таблицами в них и т.д.



    Мой косяк исправили, идём в практику!


    Установка sqlite3


    Да, это смешно, но мало ли кому-нибудь понадобится


    Я не буду описывать алгоритм установки, ведь это давно сделали за меня, если вам нужно установить данный модуль, то просьба идти вот сюда.


    Создание первой БД


    import sqlite3 as sql
    
    con = sql.connect('test.db')
    with con:
        cur = con.cursor()
        cur.execute("CREATE TABLE IF NOT EXISTS `test` (id INTEGER)")
        con.commit()
    

    Сначала импорт, потом «con =».
    Объясняю, sql.connect(«test.db») — создает файл с именем «test.db», если запустили впервые. То есть принимает на вход путь до файла с расширением .db


    cur = con.cursor — позволит нам производить операции с БД, остальное не важно.


    cur.execute(...) — создаёт таблицу с именем тест и всего 1 колонкой id, в которой все данные — числа


    commit() — грубо говоря, сохранение БД


    А давайте создадим программу, которая запрашивает имя и фамилию, и записывает их в БД, а потом по выбору цифр либо выводит, либо записывает снова.


    import sqlite3 as sql
    
    print("1 - добавление\n2 - получение")
    choice = int(input("> "))
    con = sql.connect('test.db')
    with con:
        cur = con.cursor()
        cur.execute("CREATE TABLE IF NOT EXISTS `test` (`name` STRING, `surname` STRING)")
    
        if choice == 1:
            name = input("Name\n> ")
            surname = input("Surname\n> ")
            cur.execute(f"INSERT INTO `test` VALUES ('{name}', '{surname}')")
        elif choice == 2:
            cur.execute("SELECT * FROM `test`")
            rows = cur.fetchall()
            for row in rows:
                print(row[0], row[1])
        else:
            print("Вы ошиблись")
    
        con.commit()
        cur.close()
    
    

    Стандартные моменты пропустим.


    cur.execute(«INS...») — Добавление данных


    cur.execute(«SeL...») — Получение данных. И так как там отдаётся массив, то мы его перебираем, а после ещё и из кортежа данные берём.


    «SELECT», «INSERT», «DROP» и т.д. — это всё SQL.


    cur.fetchall() — это что бы в переменную записалось всё, что пришло из БД.


    Вывод


    Базы данных — важная и очень нужная вещь. Здесь мы затронули настолько её малую часть, что аж смешно. Поэтому чтобы действительно узнать как это работает, советую почитать об этом всём в интернете, благо информации много. Удачи!

    Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

    Как вам статья?

    • 56,3%Плохо120
    • 8,0%Неплохо17
    • 8,9%Средне19
    • 11,7%Можно лучше25
    • 12,7%Хорошо27
    • 2,4%Лучше некуда5
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 9

      +11
              name = input("Name\n> ")
              surname = input("Surname\n> ")
              cur.execute(f"INSERT INTO `test` VALUES ('{name}', '{surname}')")
      

      Я, конечно, понимаю, что статья учебная, но давать настолько вредный пример это нехорошо. Нужно рассказать про параметры и sql injections и что вот так, как в этом коде, делать никогда нельзя.
        0
        например вот такой инъекцией можно себе вместо имени чей то пароль/емейл/что найдете поставить
        ',(SELECT password FROM test WHERE name='slavik'))--

        P.S. Как ребенок обрадовался — уже думаешь «ну какие sql инъекции в 2к19м» и тут на ровном месте появляется песочница такая для экспериментов
        +4
        Детский сад…
        Ну или более развернуто — краткий конспект официальной документации по питону в изложении новичка.
        Назвать статьей (тем более — интересной) довольно сложно.
          +1
          Хм, автору следовало бы определиться: статья про то, что такое SQL и реляционные БД, или статья про то, как работать из питона с SQLite.
          Если про первое — основная часть совсем для новичков, причем половина информации в стиле «сами разберетесь», а если второе — зачем тем, кто уже разбирается в принципах SQL, расписывать основы? Им нужна практика, примеры кода для типичных задач (вставка, поиск, удаление).
          Ну и общий уровень посетителей хабра, на самом деле, в основном повыше обоих кейсов.
            +4

            Даже комментировать ничего не надо, автор все уже сам написал:


            Здесь мы затронули настолько её малую часть, что аж смешно. Поэтому чтобы действительно узнать как это работает, советую почитать об этом всём в интернете, благо информации много.
              0
              Да, это смешно, но мало ли кому-нибудь понадобится

              Вот как-то так.
              +5

              Автор, мы поняли, что вы уже неделю изучаете питон. Но, пожалуйста, не нужно флудить об этом постами на хабре по 3 раза на дню.

                +1

                Лолчто?
                Реляционная бд это не просто табличная система хранения данных, это ещё и, блин, реляции, связи между таблицами.
                SQL это вообще не база данных, тем более не имеет никакого отношения к непосредственно реляциям.
                Ну и все в этом духе.
                Пожалуйста, изучите материал прежде чем учить других. Вы больше навредите.

                  0
                  >Реляционные БД — БД, в которых данные хранятся в виде таблицы, например Exel.
                  Например что? Если речь про Excel — то это не реляционная БД. А если не Excel — то речь вообще непонятно про что.

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое