Что быстрее sql или python
«Group By» в SQL и Python: сравнение
Изучение перекрывающихся функций SQL и Python может помочь тем из нас, кто знаком с одним языком, лучше освоить другой. И, обладая глубоким пониманием того и другого, мы все можем принимать более взвешенные решения о том, как комбинировать и использовать каждый из них, упрощая выбор правильного инструмента для каждой задачи.
Например; многие функции написаны более кратко на Python. Но если преимущество краткости перевешивается ценностью наличия всего аналитического кода на одном языке, вы все равно захотите использовать SQL. С другой стороны, Python включает много сложных функций, которые не осуществимы в SQL, и ценность подхода, основанного только на SQL, может быть перевешена более широким набором операций, которые становятся доступными при совместном использовании обоих языков. Только узнав о функциональном совпадении аналитических языков, мы сможем эффективно принимать эти решения.
Чтобы увидеть, все примеры, упомянутые в этом посте, реализованы на практике, посмотрите этот пример отчета. Этот пост структурирован так, что вы можете пропустить его на основе ваших текущих знаний.
Функции агрегации
Когда мы применяем операцию группировки к набору данных в SQL, мы разделяем набор данных на отдельные «группы». На практике тип функции, наиболее часто применяемой к группе данных, – это функция агрегирования. На высоком уровне процесс агрегирования данных может быть описан как применение функции к ряду строк для создания меньшего подмножества строк. На практике это часто выглядит как вычисление общего количества строк в наборе данных или вычисление суммы всех строк в определенном столбце.
По умолчанию агрегатные функции SQL, например, count() применяются ко всем строкам в наборе данных и возвращают одно значение. Например, следующий запрос возвращает общее количество строк в таблице sf_bike_share_trip:
Интересно, что агрегатная функция count() имеет другую, часто упускаемую из вида функциональность. Если вы укажете столбец внутри функции count(), он вернет количество строк с ненулевыми экземплярами этого столбца вместо абсолютного общего количества строк. Например, если мы хотим рассчитать количество поездок, когда поле zip_code не равно нулю, мы могли бы использовать следующий запрос:
Применение функций агрегирования ко всем наборам данных является полезной функциональностью, но, как упоминалось ранее, мы часто хотим применять эту функцию отдельно для отдельных групп данных в наборе данных. Здесь начинается операция group by.
Group By
На высоком уровне предложение group by в SQL позволяет независимо применять функции агрегирования к отдельным группам данных в наборе данных.
Возвращаясь к нашему предыдущему запросу, давайте посчитаем количество поездок на велосипеде ( count(*)) по станции, с которой они начали ( start_station_name). Мы делаем это, добавляя start_station_name к списку выбранных столбцов и добавляя предложение group by, явно указывающее SQL для группировки count(*)агрегации по столбцу start_station_name:
Что, если мы также хотели бы указать среднюю, минимальную и максимальную продолжительность поездки на начальную станцию? SQL позволяет добавить к этому запросу произвольное количество функций агрегирования:
SQL также позволяет нам добавлять произвольное количество столбцов в наше предложение group by. Например, если мы хотим рассчитать количество поездок и среднюю, минимальную и максимальную продолжительность поездки для каждой комбинации начальных и конечных станций, мы можем сделать это с помощью следующего запроса:
Как видите, мы добавили столбец end_station_name как в наш список select, так и в наше предложение group by. Большинство платформ SQL предлагают некоторый синтаксический сахар для этой операции, что позволяет вам использовать порядковый номер столбца в selectвыражении вместо явной ссылки на имена столбцов. На практике это будет выглядеть так:
Примечание: не все платформы SQL позволяют ссылаться на столбцы по их порядковому положению в операторе select. Например, в базах данных Oracle и SQL Server вам нужно будет явно ссылаться на столбцы по имени в group byпредложении.
Что если мы хотим строго отфильтровать значения, возвращаемые этим запросом, чтобы начать комбинации станций и конечных станций с более чем 1000 поездок? Поскольку предложение where в SQL поддерживает только фильтрацию записей, а не результатов функций агрегирования, нам нужно найти другой способ. Вот где оператор having вступает в силу.
having
Предложение having позволяет пользователям фильтровать значения, возвращаемые из сгруппированного запроса, на основе результатов функций агрегирования.
Как упоминалось ранее, мы хотим отфильтровать значения, возвращаемые в нашем запросе, для комбинаций начальной и конечной станций с более чем 1000 рейсов. Мы можем достичь этого, используя следующий запрос:
На данный момент мы изучили многое из того, что SQL может делать с функциональностью group by. Давайте посмотрим, как эта же реализация будет выглядеть в Python, используя библиотеку pandas.
Python
Как обычно, SQL и pandas довольно сильно различаются по синтаксису, но имеют много общего в функциональном отношении. SQL может быть более простым вариантом, имея под рукой только более простые задачи, но предел функциональности группировки в SQL только поверхностно затрагивает функциональность группировки Python с использованием панд.
В pandas, «groups» данные создаются с помощью python метода называется groupby(). Метод groupby() может быть вызван непосредственно на объект Dataframe в pandas.
В качестве примера мы собираемся использовать выходные данные SQL-запроса, названные Python в качестве входных данных для нашего Dataframe( df) в нашей записной книжке Python. Обратите внимание, что этот Dataframe не имеет функций агрегирования, вычисляемых с помощью SQL. Он просто использует SQL, чтобы выбрать необходимые поля для нашего анализа, а мы будем использовать панды, чтобы сделать все остальное. Дополнительным преимуществом выполнения этой операции в Python является то, что рабочая нагрузка перемещается из хранилища данных.
В нашей записной книжке Python мы собираемся использовать метод groupby(), чтобы сгруппировать наш Dataframe по столбцу start_station_name и присвоить этот результат новой переменной с именем grouped_single:
Применение метода groupby() к нашему Dataframe объекта возвращает объект GroupBy, который затем присваивается переменной grouped_single. Важная вещь, которую следует отметить в отношении объекта GroupBy для Pandas, заключается в том, что в момент создания объекта не происходило разбиение Dataframe. Объект GroupBy просто содержит всю необходимую ему информацию о характере группировки. Агрегирование не будет происходить, пока мы явно не вызовем функцию агрегирования для объекта GroupBy.
В отличие от SQL, метод groupby() в pandas не имеет понятия порядковых ссылок на позиции. Таким образом, вам нужно будет явно ссылаться на ключи группировки по имени.
Теперь, когда у нас есть объект GroupBy, созданный с соответствующими группировками, мы можем применить к нему методы агрегирования. По умолчанию pandas будет применять любой метод агрегации, который вы вызываете для объекта GroupBy, ко всем столбцам, не требующим вмешательства. Поскольку нас интересует только применение методов агрегирования к одному столбцу ( trip_duration_seconds), мы выберем только этот столбец из нашего нового объекта GroupBy. То, как вы выбираете отдельные столбцы в объекте GroupBy, аналогично тому, как вы делаете это с объектом Dataframe:
Pandas позволяет выбрать любое количество столбцов, используя эту операцию. Pandas будет возвращать сгруппированные серии, когда вы выбираете один столбец, и сгруппированные кадры данных, когда вы выбираете несколько столбцов. Теперь, когда у нас есть один столбец, выбранный из нашего объекта GroupBy, мы можем применить к нему соответствующие методы агрегирования. Есть несколько способов сделать это. Мы можем присвоить переменную объекту GroupBy и затем вызвать метод агрегирования для этой переменной:
Или мы можем использовать метод цепочки:
Мы можем повторить этот процесс для каждого из агрегатов, которые мы рассчитываем:
Вы можете увидеть, как это может запутаться, если вы вычисляете большое количество агрегатов. К счастью, pandas предлагает способ вычисления нескольких агрегатов для одного объекта GroupBy. Метод agg() может принимать принимать список методов агрегирования для отдельных столбцов:
Вы также можете связать метод rename() в pandas, чтобы переименовать новые столбцы агрегации в нужные вам имена:
Теперь мы реплицировали наш SQL-запрос до момента фильтрации наших групп на основе результата функции агрегирования. В pandas вы можете использовать стандартное индексирование для возврата подмножества исходного объекта на основе результата функции агрегирования. Например, если мы хотим отфильтровать наш результирующий набор только для комбинаций начальной станции и конечной станции с более чем 1000 поездок, мы могли бы использовать следующий оператор:
Blur The Line
Глубокое понимание функций группировки в SQL и Python может помочь вам определить, какой язык следует использовать для какой функции и в какое время. Если у вас нет сложных требований к группировке, вы, вероятно, захотите работать в SQL, чтобы вы могли хранить всю свою работу на одном языке. Но если ваш анализ включает более тяжелые групповые операции, подобные упомянутым выше, перемещение всех групповых операций в записную книжку Python позволит вам воспользоваться преимуществами более сложной функциональности, доступной в pandas.
Это преимущество возможности использования нескольких языков анализа данных; Вы можете настроить гибридный подход в соответствии с вашими потребностями по мере их развития.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Сравнение Python и SQL для построения конвейеров данных
Дата публикации Feb 16, 2019
Ворвавшись в рабочую силу в качестве веб-разработчика, мое первое взаимодействие с базами данных и SQL было с использованием объектно-реляционной модели (ORM). Я использовал API наборов запросов Django и имел отличный опыт использования интерфейса. После этого я перешел на должность инженера по обработке данных и стал более активно использовать наборы данных для создания ИИ. В мои обязанности входило брать данные из пользовательского приложения и превращать их во что-то, что можно использовать Data Scientists, процесс, широко известный как ETL.
Как гласит история, данные в производственной системе были беспорядочными и требовали значительных преобразований, прежде чем кто-либо смог построить ИИ из этого. Были столбцы JSON, которые имели разные схемы на строку, столбцы содержали смешанные типы данных, а некоторые строки имели ошибочные значения. Кроме того, необходимо рассчитать такие функции, как продолжительность пребывания пользователя в качестве клиента и продолжительность ожидания между посещениями. Разрабатывая функции очистки, агрегирования и разработки данных, я попытался решить, какой язык лучше всего подойдет для этой задачи. Придя с работы, где я использовал Python весь день каждый день, я знал, что он может сделать эту работу. Однако из этого опыта я узнал, что только то, что python может выполнять эту работу, не означает, что она должна.
Мы работаем с набором данных временного ряда, в котором мы хотим отслеживать конкретных пользователей с течением времени. Законы о конфиденциальности не позволяют нам знать конкретные даты посещений пользователей, поэтому мы решили, что мы нормализуем дату записи для первого посещения пользователей (т. Е. Через 5 дней после их первого посещения и т. Д.). Для нашего анализа было важно знать время с момента последнего посещения, а также время с момента их первого посещения. У A было два образца наборов данных: один с приблизительно 7,5 миллионами строк размером 6,5 ГБ, а другой с 550 000 строк размером 900 МБ.
Используя код Python и SQL, показанный ниже, я использовал меньший набор данных, чтобы сначала проверить преобразования. Python и SQL выполнили задачу за 591 и 40,9 секунд соответственно. Это означает, что SQL смог обеспечить ускорение примерно в 14,5 раз!
# PYTHON
# connect to db using wrapper around psycopg2
db = DatabaseConnection(db=’db’, user=’username’, password=’password’)# grab data from db and load into memory
df = db.run_query(«SELECT * FROM cleaned_table;»)
df = pd.DataFrame(df, columns=[‘user_id’, ‘series_id’, ‘stamp’])# calculate since first visit
df = df.as(_since_first=df.groupby(‘user_id’, sort=False).stamp.apply(lambda x: x — x.min()))# calculate since last visit
df = df.as(_since_last=df.sort_values([‘stamp’], ascending=True).groupby(‘user_id’, sort=False)[‘stamp’].transform(pd.Series.diff))# save df to compressed csv
df.to_csv(‘transform__test.gz’, compression=’gzip’)
— SQL equivalent
— increase the working memory (be careful with this)
set work_mem=’600MB’;— create a dual index on the partition
CREATE INDEX IF NOT EXISTS user__index ON table(user_id, stamp);— calculate since last visit and since first visit in one pass
SELECT *, AGE(stamp, LAG(stamp, 1, stamp) OVER w) AS _since_last, AGE(stamp, FIRST_VALUE(stamp) OVER w) AS _since_first FROM table WINDOW w AS (PARTITION BY user_id ORDER BY stamp);
Это преобразование SQL было не только быстрее, но и более читабельным, и, следовательно, более легким в обслуживании. Здесь я использовал функции lag и first_value, чтобы найти конкретные записи в истории пользователей (называемые разделами). Затем я использовал функцию возраста, чтобы определить разницу во времени между посещениями.
Еще более интересно то, что когда эти сценарии преобразования были применены к набору данных объемом 6,5 ГБ, python полностью потерпел неудачу. Из 3 попыток python зависал 2 раза, и мой компьютер полностью зависал в 3 раза … в то время как SQL занял 226 секунд.
Другим изменяющим правила игры для меня было осознание того, что Postgres довольно хорошо работал с JSON. Сначала я думал, что невозможно сгладить или разобрать json в postgres … Я не могу поверить, что я был настолько глуп. Если вы хотите соотнести json и его схема согласована между строками, то вам лучше всего использовать встроенную в Postgres способность анализировать json.
С другой стороны, половина json в моем образце набора данных не является допустимой json и, следовательно, сохраняется в виде текста. В этом случае у меня был выбор, я мог либо перекодировать данные, чтобы сделать их действительными, либо я мог просто отбросить строки, которые не следовали правилам. Для этого я создал новую функцию SQL с именем is_json, которую затем мог бы использовать для определения допустимого json в предложении WHERE.
К сожалению, я обнаружил, что у user_json была другая схема в зависимости от того, в какой версии приложения был пользователь. Хотя это имеет смысл с точки зрения разработки приложений, это делает очень дорогим условный анализ каждой возможности в строке. Был ли мне суждено снова войти в питона … не случайно! Я нашел другую функцию переполнения стека, написанную богом postgres по имениКлину,
Эта функция смогла успешно сгладить мой json и довольно легко решить мой худший кошмар.
Существует идиома, которая объявляет Python вторым лучшим языком для выполнения практически любых задач. Я считаю, что это правда, и в некоторых случаях обнаружил, что разница в производительности между Python и «лучшим» языком незначительна. Однако в этом случае python не смог конкурировать с SQL. Эти осознания наряду с чтениями, которые я делал, полностью изменили мой подход к ETL. Сейчас я работаю в парадигме «Не перемещайте данные в код, а перемещайте код в свои данные». Python перемещает ваши данные в код, а SQL действует на месте. Более того, я знаю, что только поцарапал поверхность возможностей sql и postgres. Я с нетерпением жду более удивительной функциональности и возможности получить ускорение благодаря использованию аналитического хранилища.
Разница между Python и SQL
Python является одним из самых популярных языков программирования общего назначения, используемых для анализа и визуализации данных. Языки сценариев заменили объектно-ориентированные языки как разнови
Содержание:
Python является одним из самых популярных языков программирования общего назначения, используемых для анализа и визуализации данных. Языки сценариев заменили объектно-ориентированные языки как разновидность десятилетия, главным образом из-за мощности и гибкости, которую они предоставляют для разработки графических пользовательских интерфейсов. Языки сценариев являются основой технологий во всемирной паутине, и наборы офисного программного обеспечения, такие как Microsoft Office, сильно зависят от них. Предыдущие языки сценариев были проще и, как правило, создавались на основе языков, поддерживающих системное программирование. Python — это полноценный язык программирования, который облегчает эксперименты. Решение проблем просто и элегантно выражено. И, что самое приятное, Python делает программирование увлекательным.
SQL — это язык запросов, разработанный для запроса и извлечения данных из баз данных. База данных — это не что иное, как набор связанной информации. Например, телефонный справочник — это база данных имен, телефонных номеров и адресов всех людей, живущих в определенном регионе. Системы управления базами данных существуют уже много лет. Благодаря современным технологиям общепринятое использование систем управления базами данных стало распространяться в других направлениях, что обусловлено растущим спросом предприятий, увеличением объемов корпоративных данных и интернет-технологий. SQL — это стандартный язык, используемый для связи с реляционной базой данных.
Что такое Python?
Python — это язык сценариев, написанный на переносимом языке ANSI C, поэтому он компилируется и работает во всех жизнеспособных операционных системах. Он был получен из ABC, языка, предназначенного для обучения программированию в начале 1980-х годов. Традиционные системные языки, такие как C ++ и Java, были разработаны для решения проблем, возникающих в крупномасштабном программировании, где основное внимание уделяется структуре и дисциплине. Python предложил альтернативный подход к программированию. Python является гибким с рядом функций, которые делают его предпочтительным выбором в качестве первого языка программирования. И, что самое приятное, код Python может быть написан с помощью любого текстового редактора, который может загружать и сохранять текст с использованием кодировки символов ASCII или UTF-8 Unicode. Python реализует все концепции, обычно связанные с объектно-ориентированным программированием (ООП).
Что такое SQL?
В 1970 г. д-р Э. Ф. Кодд из исследовательской лаборатории IBM опубликовал документ под названием «Реляционная модель данных для больших общих банков данных», в котором предлагалось представить данные в виде наборов таблиц. Вскоре после того, как документ был выпущен, IBM создала группу для создания прототипа на основе идей Кодда. Эта группа разработала упрощенную версию языка DSL / Alpha, которая была первоначально предложена Коддом, и назвала ее SQUARE. Они также усовершенствовали язык и назвали его SEQUEL, который, наконец, был переименован в SQL. Таблицы являются основной единицей управления данными в среде SQL, которая обеспечивает структуру, в которой реализован SQL. SQL — это язык, который вы используете для выражения ваших потребностей в базе данных.
Разница между Python и SQL
Язык, используемый в Python vs. SQ
— Python — широко известный язык сценариев, написанный на переносимом языке ANSI C. Python — это язык программирования общего назначения высокого уровня, используемый для разработки приложений с графическим интерфейсом, веб-сайтов и веб-приложений. Python является гибким с рядом функций, которые делают его предпочтительным выбором в качестве первого языка программирования. SQL (язык структурированных запросов), с другой стороны, является языком запросов, который позволяет вам обращаться к базам данных и манипулировать ими. SQL — это стандартный язык, используемый для связи с реляционной базой данных. Это язык, который вы используете, чтобы выразить свои потребности в базе данных.
История Питона против SQ
— Python произошел от ABC, языка, предназначенного для обучения программированию в начале 1980-х. Python был создан Гвидо Ван Россумом в CWI в Нидерландах, и его разработка началась в конце 1980-х годов. Он был в основном разработан для акцентирования читабельности кода. Название «Питон» произошло от знаменитого британского телесериала 1970-х годов «Летающий цирк Монти Пайтона», который Россум смотрел примерно в то же время, когда ему понадобилось короткое название для языка. Первоначально SQL был разработан IBM, но идея была основана на статье д-ра Э. Ф. Кодда, озаглавленной «Реляционная модель данных для больших общих банков данных».
Цель Python против SQ
Python — это язык программирования общего назначения, используемый для разработки как настольных, так и веб-приложений. Это простой, легкий для изучения язык программирования, известный своей читабельностью, простотой и портативностью. С правильными инструментами и библиотеками Python можно использовать для сборки практически всего. В идеале он используется для серверной веб-разработки, анализа данных, научных вычислений и искусственного интеллекта. SQL является стандартным языком запросов для систем управления реляционными базами данных. Он предоставляет структурированный способ получения информации из систем реляционных баз данных для использования в корпоративных приложениях.
Python против SQL: Сравнительная таблица
Резюме Python против SQL
Python — это полноценный язык программирования, который облегчает эксперименты, тогда как SQL является стандартным языком запросов для систем управления реляционными базами данных, который позволяет вам получать доступ к базам данных и манипулировать ими. Python — это язык программирования общего назначения, используемый для разработки как настольных, так и веб-приложений. Это простой, легкий для изучения язык программирования, известный своей читабельностью, простотой и портативностью. SQL — это язык, который вы используете для выражения ваших потребностей в базе данных. Со временем в язык SQL были добавлены новые функции для включения объектно-ориентированной функциональности. Это мощный язык манипулирования данными, основанный на реляционных идеях.
Изучаем программирование. День 11. Python + SQL. Зачем?
Вчера мы с вами поговорили о HTML и CSS и о том, какое отношение они имеют к веб-разработке с использованием Python. Сегодня поговорим о более обширной и серьёзной для нашей работы веб-программистом теме. Не будем забегать вперёд о какой, сейчас вы всё узнаете.
Когда мы с вами заходим на любую страничку в интернете, конечно, если это не какая-нибудь статичная страничка, где данные никогда не меняются и отображаются обычным текстом и одноцветными блоками(хотя и в этом случае бывают исключения), мы видим на этой страничке различные данные — статьи, картинки, имя автора статьи, дату публикации и так далее, и так далее. И если статей много, то они распределяются по разным страницам, мы можем смотреть их, щёлкая по ним мышкой, а они открываются в полном размере. Вы никогда не задумывались откуда берутся все эти отображаемые данные и как браузер нам их так быстро предоставляет, через всего 0.5-1 секунду? Ведь они где-то должны храниться, не в коде же HTML и CSS они хранятся, в этом случае, вёрстка страницы у нас занимала бы миллионы строк кода, а браузер бы зависал, пока искал, что мы от него хотим. И, возможно, зависал бы намертво, потому что, чтобы вычислить такие объемы информации из кучи несгруппированной информации, ему понадобилось бы много-много времени.
Представьте себе такую городскую библиотеку, где все книги просто свалены в кучу, без каких-либо опознавательных знаков и без какой-либо сортировки, и книг этих, предположим, что хотя бы пять тысяч. К вам приходит читатель и просит выдать ему роман «Бесы» Фёдора Михайловича Достоевского. Вы идёте к этой большой куче книг и начинаете бегать глазами по корешкам, где они видны, а потом раскапывать кучу и перебирать каждую книгу. Сколько времени у вас это займёт? Хорошо, если вы управитесь в течение дня, но даже это время читатель не будет вас ждать, а пойдёт в библиотеку, где всё рассортировано по каталогам, а в каталогах всё рассортировано по карточкам. Где поиск книги занимает 5-10 минут максимум.
Вот и пользователь, который зашёл на страничку с таким бардаком и неотсортированными данными, тоже быстро от нас уйдёт. Кто же поможет нам в сложившейся ситуации?
Ответ на этот вопрос следующий — базы данных, а если быть совсем точным — реляционные базы данных. Не знаю, как вас, а меня сначала напугало слово «реляционные», но после того, как я понял, что оно образовано от английского слова relation(отношение), то всё встало на свои места. Чтобы лучше понять, что же такое реляционная база данных, посмотрим на следующую картинку, где всё очень наглядно показано.
Как показано на данной картинке база данных это набор таблиц, в которых содержатся различные данные. Всё, на самом деле, достаточно просто. А реляционные они потому, что связаны определённым кодом. Сейчас объясню более понятно на примере библиотеки.
У нас с вами есть библиотека — это, в нашем случае, база данных. У книг есть авторы, у авторов есть имя, фамилия, отчество и порядковый номер в нашей библиотеке(id). Авторы — это таблица. Также у нас есть книги, как мы уже поняли, у книг есть название, год выпуска, количество страниц и ISBN(уникальный номер книги). Книги — ещё одна таблица с данными. У нас есть издательства, которые соответственно издают книги, у издательств есть город местонахождения, юридическое название, юридический адрес, фактический адрес и т.д. Издательства, как вы наверное уже поняли, тоже — таблица. Также в библиотеке есть полки, у полок есть их порядковый номер и местонахождение. Полки это тоже таблица. Так вот, чтобы нашему библиотекарю найти роман «Бесы» Фёдора Михайловича Достоевского, нужно зайти в таблицы книги, ввести в поиске «Бесы» и увидеть идентификатор полки, где книга находится. При этом в таблице с книгами не будет ни подробной информации о полке, ни о издательстве, ни об авторе. В таблице «Книги» будут ссылки на эти таблицы. А как же компьютер поймёт, что это та самая книга? По тому самому индивидуальному коду, который есть в каждой таблице, чаще всего это id(автоматически присваиваемый индивидуальный код каждой строки данных), но возможен и ISBN(но лучше так делать не надо, так как ISBN очень ёмкий по количеству символов и в его написании можно сделать ошибку, что приведёт к неработоспособности всей базы), так как он точно не может встретиться в пределах таблицы два раза, другими словами — уникальный. В таблице-родителе, например в таблице книг, id книги называется primary key(первичный ключ), а в таблице издательства, где на этот ключ идёт ссылка, он называется foreign key(внешний ключ). Давайте ещё раз проговорим: primary key в пределах таблицы должен быть всего один, иначе он теряет всякий смысл, foreign key может быть столько, сколько вам нужно для ваших задач.
Вы наверное уже догадались, что должно быть что-то, что ответственно за создание баз данных, таблиц в них, данных в этих таблицах и так далее. И ваша догадка верна, для этого существует специальный язык программирования — SQL. Также сущетсвует СУБД(система управления базами данных), из расшифровки думаю понятно, что это некий программный продукт, который позволяет нам управлять базами данных, а делает он это с помощью языка SQL в том числе. СУБД существует несколько, вот некоторые из них — MySQL, PostgreSQL, Oracle Database, SQLite, Microsoft SQL Server и другие. Работу с одной из них нам и предстоит изучить, а в процессе развития вашей карьеры, вы возможно, будете изучать и другие. По умолчанию при работе с Python в него уже включена SQLite.
Язык SQL достаточно прост и логичен, и изучение его доставляет одно удовольствие. А ещё изучать его очень интересно. Где можно ему обучиться, я расскажу в конце статьи.
Но мало выучить язык SQL.
Нужно, чтобы данные из нашей базы данных, каким-то образом обрабатывались в нашем коде Python, откуда потом пользователь получает их из шаблонов(но это совсем другая история=)). Так вот, для этой цели существует свой инструмент и называется он ORM(если вы проходили курс от JetBrains, то вы с ним уже встречались). ORM расшифровывается, как (информация из Википедии)
Object-Relational Mapping, рус. объектно-реляционное отображение, или преобразование
В Python самой популярной ORM является SQLAlchemy, она независима от различных фреймворков(опять это слово! скоро-скоро мы к ним придём, потерпите ещё чуть-чуть) Python и чувствует себя в них комфортно. Хотя, например, в Django(а Django это фреймворк))), всё-всё больше не буду))), есть своя ORM — Django ORM, но её недостаток в том, что работает она исключительно в пределах Django, и говорят не подходит для серьёзных запросов к базам данных, в отличие от SQLAlchemy.
И на данный момент у меня для вас есть небольшая хорошая новость: сейчас изучать SQLAlchemy вам не нужно, вы плавно будете приступать к его изучению в процессе работы с Django или Flask(позже-позже).
Где поучить SQL?
1. Learning SQL, 3rd Edition by Alan Beaulieu — очень крутая книжка по SQL, ищите именно третье издание, оно самое новое. И оно на английском. На русском есть второе издание, но, когда я недавно её хотел перечитать и освежить знания, я столкнулся с тем, что код в ней устарел и не работает на новых версиях MySQL. А третье издание выпущено в марте этого 2020 года.
2. Введение в базы данных — бесплатный курс на Stepik, с сертификатом от Высшей Школы Экономики.
3. SQL Fundamentals — сборник из пяти курсов по SQL с сертификатами за каждый и подтверждением полученных навыков в конце. Курс крутой — достаточно теории, много практики, хорошие примеры. Но он платный, доступен по подписке за 1000 с чем-то рублей в месяц(в зависимости от курса доллара). Можно найти промокод и тогда курс будет дешевле.
На сегодня на этом всё, завтра, возможно, поговорим о фреймворках, а возможно, о чём-то другом тоже важном и интересном =)
До завтра. А если понравилась статься — ставьте лайки и подписывайтесь на канал, если ещё нет. Приятного вам обучения!
Предыдущая статья ……………………………………………………. Следующая статья.