From 929a456708374d3dce7349a568a10f9ea75a6528 Mon Sep 17 00:00:00 2001 From: Winifred Paul Thattil Date: Thu, 30 Jul 2026 21:19:35 +0200 Subject: [PATCH] Add files via upload --- Connecting_python_to_SQL.ipynb | 610 +++++++++++++++++++++++++++++++++ 1 file changed, 610 insertions(+) create mode 100644 Connecting_python_to_SQL.ipynb diff --git a/Connecting_python_to_SQL.ipynb b/Connecting_python_to_SQL.ipynb new file mode 100644 index 0000000..9109020 --- /dev/null +++ b/Connecting_python_to_SQL.ipynb @@ -0,0 +1,610 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 9, + "id": "06f8a381-7705-463f-a625-e3659a23f7bb", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import os\n", + "from dotenv import load_dotenv\n", + "from urllib.parse import quote_plus\n", + "from sqlalchemy import create_engine" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "6ba84934-ceaf-42c4-aae8-8593f79ec96a", + "metadata": {}, + "outputs": [ + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter your MySQL password: ········\n" + ] + } + ], + "source": [ + "from getpass import getpass\n", + "\n", + "mysql_password = getpass(\"Enter your MySQL password: \")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "5f4372f5-98d2-4400-8a2c-93bbfc6f24c9", + "metadata": {}, + "outputs": [], + "source": [ + "encoded_password = quote_plus(mysql_password)\n", + "\n", + "engine = create_engine(\n", + " f\"mysql+pymysql://root:{encoded_password}@localhost/sakila\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "d6029eb6-9816-4f1c-8d8b-8308507a965b", + "metadata": {}, + "outputs": [], + "source": [ + "from sqlalchemy import text\n", + "\n", + "def rentals_month(engine, month, year):\n", + " \n", + " query = text(\"\"\"\n", + " SELECT *\n", + " FROM rental\n", + " WHERE MONTH(rental_date) = :month\n", + " AND YEAR(rental_date) = :year;\n", + " \"\"\")\n", + " \n", + " with engine.connect() as connection:\n", + " rentals_dataframe = pd.read_sql(\n", + " query,\n", + " connection,\n", + " params={\n", + " \"month\": month,\n", + " \"year\": year\n", + " }\n", + " )\n", + " \n", + " return rentals_dataframe" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "8857ffc1-a999-4289-8594-59e5521c2588", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
rental_idrental_dateinventory_idcustomer_idreturn_datestaff_idlast_update
012005-05-24 22:53:303671302005-05-26 22:04:3012006-02-15 21:30:53
122005-05-24 22:54:3315254592005-05-28 19:40:3312006-02-15 21:30:53
232005-05-24 23:03:3917114082005-06-01 22:12:3912006-02-15 21:30:53
342005-05-24 23:04:4124523332005-06-03 01:43:4122006-02-15 21:30:53
452005-05-24 23:05:2120792222005-06-02 04:33:2112006-02-15 21:30:53
\n", + "
" + ], + "text/plain": [ + " rental_id rental_date inventory_id customer_id \\\n", + "0 1 2005-05-24 22:53:30 367 130 \n", + "1 2 2005-05-24 22:54:33 1525 459 \n", + "2 3 2005-05-24 23:03:39 1711 408 \n", + "3 4 2005-05-24 23:04:41 2452 333 \n", + "4 5 2005-05-24 23:05:21 2079 222 \n", + "\n", + " return_date staff_id last_update \n", + "0 2005-05-26 22:04:30 1 2006-02-15 21:30:53 \n", + "1 2005-05-28 19:40:33 1 2006-02-15 21:30:53 \n", + "2 2005-06-01 22:12:39 1 2006-02-15 21:30:53 \n", + "3 2005-06-03 01:43:41 2 2006-02-15 21:30:53 \n", + "4 2005-06-02 04:33:21 1 2006-02-15 21:30:53 " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "may_rentals = rentals_month(engine, 5, 2005)\n", + "\n", + "may_rentals.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "18195d00-f88b-4150-89b2-0d8baa28b4e8", + "metadata": {}, + "outputs": [], + "source": [ + "def rental_count_month(rentals_dataframe, month, year):\n", + " \n", + " column_name = f\"rentals_{month:02d}_{year}\"\n", + " \n", + " rental_count_dataframe = (\n", + " rentals_dataframe\n", + " .groupby(\"customer_id\")\n", + " .size()\n", + " .reset_index(name=column_name)\n", + " )\n", + " \n", + " return rental_count_dataframe" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "0e8695d1-6518-448e-a3be-3ca0e6bb0070", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
customer_idrentals_05_2005
012
121
232
353
463
\n", + "
" + ], + "text/plain": [ + " customer_id rentals_05_2005\n", + "0 1 2\n", + "1 2 1\n", + "2 3 2\n", + "3 5 3\n", + "4 6 3" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "may_rental_count = rental_count_month(\n", + " may_rentals,\n", + " 5,\n", + " 2005\n", + ")\n", + "\n", + "may_rental_count.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "49937f29-400d-4ae6-8604-530d9c87c63d", + "metadata": {}, + "outputs": [], + "source": [ + "june_rentals = rentals_month(engine, 6, 2005)\n", + "\n", + "june_rental_count = rental_count_month(\n", + " june_rentals,\n", + " 6,\n", + " 2005\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "92ea2536-05ca-464b-ac15-8dadd1de21c2", + "metadata": {}, + "outputs": [], + "source": [ + "def compare_rentals(first_month_dataframe, second_month_dataframe):\n", + " \n", + " combined_dataframe = pd.merge(\n", + " first_month_dataframe,\n", + " second_month_dataframe,\n", + " on=\"customer_id\",\n", + " how=\"inner\"\n", + " )\n", + " \n", + " first_month_column = first_month_dataframe.columns[1]\n", + " second_month_column = second_month_dataframe.columns[1]\n", + " \n", + " combined_dataframe[\"difference\"] = (\n", + " combined_dataframe[second_month_column]\n", + " -\n", + " combined_dataframe[first_month_column]\n", + " )\n", + " \n", + " return combined_dataframe" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "95ed1d24-e561-481f-b18d-3c073e599926", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
customer_idrentals_05_2005rentals_06_2005difference
01275
12110
23242
35352
46341
\n", + "
" + ], + "text/plain": [ + " customer_id rentals_05_2005 rentals_06_2005 difference\n", + "0 1 2 7 5\n", + "1 2 1 1 0\n", + "2 3 2 4 2\n", + "3 5 3 5 2\n", + "4 6 3 4 1" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "may_june_comparison = compare_rentals(\n", + " may_rental_count,\n", + " june_rental_count\n", + ")\n", + "\n", + "may_june_comparison.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "3415b233-f0b6-4309-82bc-96b59e4052c5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
customer_idrentals_05_2005rentals_06_2005difference
3864541109
389457198
178213198
248295198
2327187
194234187
218260187
322380187
481561297
345406176
\n", + "
" + ], + "text/plain": [ + " customer_id rentals_05_2005 rentals_06_2005 difference\n", + "386 454 1 10 9\n", + "389 457 1 9 8\n", + "178 213 1 9 8\n", + "248 295 1 9 8\n", + "23 27 1 8 7\n", + "194 234 1 8 7\n", + "218 260 1 8 7\n", + "322 380 1 8 7\n", + "481 561 2 9 7\n", + "345 406 1 7 6" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "may_june_comparison.sort_values(\n", + " by=\"difference\",\n", + " ascending=False\n", + ").head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ded2496f-c468-4be3-bd58-db5f61b7b5de", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}