diff --git a/.ipynb_checkpoints/lab-sql-python-connection-checkpoint.ipynb b/.ipynb_checkpoints/lab-sql-python-connection-checkpoint.ipynb
new file mode 100644
index 0000000..740f448
--- /dev/null
+++ b/.ipynb_checkpoints/lab-sql-python-connection-checkpoint.ipynb
@@ -0,0 +1,295 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "53022ce9-0fe0-4039-8c67-27538ef9c821",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Requirement already satisfied: pymysql in c:\\users\\kraus\\anaconda3\\lib\\site-packages (1.2.0)\n"
+ ]
+ }
+ ],
+ "source": [
+ "!pip install pymysql"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "789390e3-97ec-431a-986d-bd7164d389a5",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sqlalchemy import create_engine\n",
+ "\n",
+ "engine = create_engine('mysql+pymysql://root:Ironhacksummer2026!@localhost/sakila')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "2e114ebd-c6c7-4dd7-b597-651e12e9440f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "\n",
+ "def rentals_month(engine, month, year):\n",
+ " query = f\"\"\"\n",
+ " SELECT * FROM rental\n",
+ " WHERE MONTH(rental_date) = {month} AND YEAR(rental_date) = {year}\n",
+ " \"\"\"\n",
+ " df = pd.read_sql(query, engine)\n",
+ " return df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "f0f65640-ae5c-472e-b675-6794f6858f8f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def rental_count_month(df, month, year):\n",
+ " counts = df.groupby('customer_id').size().reset_index(name=f'rentals_{month:02d}_{year}')\n",
+ " return counts"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "9682820f-eed2-4dc1-9280-4bb852973bd2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def compare_rentals(df1, df2):\n",
+ " merged = pd.merge(df1, df2, on='customer_id', how='outer')\n",
+ " merged['difference'] = merged.iloc[:, 1] - merged.iloc[:, 2]\n",
+ " return merged"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "ee55df88-0a9b-4855-a8f9-2286e599ea23",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "may_df = rentals_month(engine, 5, 2005)\n",
+ "june_df = rentals_month(engine, 6, 2005)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "5ba6da4a-c516-469d-badb-16ffcaf2901c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " customer_id | \n",
+ " rentals_06_2005_x | \n",
+ " rentals_06_2005_y | \n",
+ " difference | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 1 | \n",
+ " 7 | \n",
+ " 7 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 4 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 4 | \n",
+ " 6 | \n",
+ " 6 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 5 | \n",
+ " 5 | \n",
+ " 5 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 585 | \n",
+ " 595 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 586 | \n",
+ " 596 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 587 | \n",
+ " 597 | \n",
+ " 3 | \n",
+ " 3 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 588 | \n",
+ " 598 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 589 | \n",
+ " 599 | \n",
+ " 4 | \n",
+ " 4 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
590 rows × 4 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " customer_id rentals_06_2005_x rentals_06_2005_y difference\n",
+ "0 1 7 7 0\n",
+ "1 2 1 1 0\n",
+ "2 3 4 4 0\n",
+ "3 4 6 6 0\n",
+ "4 5 5 5 0\n",
+ ".. ... ... ... ...\n",
+ "585 595 2 2 0\n",
+ "586 596 2 2 0\n",
+ "587 597 3 3 0\n",
+ "588 598 1 1 0\n",
+ "589 599 4 4 0\n",
+ "\n",
+ "[590 rows x 4 columns]"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "may_counts = rental_count_month(june_df, 6, 2005)\n",
+ "june_counts = rental_count_month(june_df, 6, 2005)\n",
+ "\n",
+ "result = compare_rentals(may_counts, june_counts)\n",
+ "result"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "17f2be36-b8a4-4e05-9135-484215470705",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "aef1fa62-fcd2-4a24-8fe3-373129346735",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f26136db-0d4e-4e32-ad42-09c25c0cec70",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "d33cd019-9e3a-433f-b709-ce4dfef79310",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "60e39851-b6e3-4a07-b77a-b4931b09f22e",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python [conda env:base] *",
+ "language": "python",
+ "name": "conda-base-py"
+ },
+ "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
+}
diff --git a/lab-sql-python-connection.ipynb b/lab-sql-python-connection.ipynb
new file mode 100644
index 0000000..740f448
--- /dev/null
+++ b/lab-sql-python-connection.ipynb
@@ -0,0 +1,295 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "53022ce9-0fe0-4039-8c67-27538ef9c821",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Requirement already satisfied: pymysql in c:\\users\\kraus\\anaconda3\\lib\\site-packages (1.2.0)\n"
+ ]
+ }
+ ],
+ "source": [
+ "!pip install pymysql"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "789390e3-97ec-431a-986d-bd7164d389a5",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sqlalchemy import create_engine\n",
+ "\n",
+ "engine = create_engine('mysql+pymysql://root:Ironhacksummer2026!@localhost/sakila')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "2e114ebd-c6c7-4dd7-b597-651e12e9440f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "\n",
+ "def rentals_month(engine, month, year):\n",
+ " query = f\"\"\"\n",
+ " SELECT * FROM rental\n",
+ " WHERE MONTH(rental_date) = {month} AND YEAR(rental_date) = {year}\n",
+ " \"\"\"\n",
+ " df = pd.read_sql(query, engine)\n",
+ " return df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "f0f65640-ae5c-472e-b675-6794f6858f8f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def rental_count_month(df, month, year):\n",
+ " counts = df.groupby('customer_id').size().reset_index(name=f'rentals_{month:02d}_{year}')\n",
+ " return counts"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "9682820f-eed2-4dc1-9280-4bb852973bd2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def compare_rentals(df1, df2):\n",
+ " merged = pd.merge(df1, df2, on='customer_id', how='outer')\n",
+ " merged['difference'] = merged.iloc[:, 1] - merged.iloc[:, 2]\n",
+ " return merged"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "ee55df88-0a9b-4855-a8f9-2286e599ea23",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "may_df = rentals_month(engine, 5, 2005)\n",
+ "june_df = rentals_month(engine, 6, 2005)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "5ba6da4a-c516-469d-badb-16ffcaf2901c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " customer_id | \n",
+ " rentals_06_2005_x | \n",
+ " rentals_06_2005_y | \n",
+ " difference | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 1 | \n",
+ " 7 | \n",
+ " 7 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 4 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 4 | \n",
+ " 6 | \n",
+ " 6 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 5 | \n",
+ " 5 | \n",
+ " 5 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 585 | \n",
+ " 595 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 586 | \n",
+ " 596 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 587 | \n",
+ " 597 | \n",
+ " 3 | \n",
+ " 3 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 588 | \n",
+ " 598 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 589 | \n",
+ " 599 | \n",
+ " 4 | \n",
+ " 4 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
590 rows × 4 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " customer_id rentals_06_2005_x rentals_06_2005_y difference\n",
+ "0 1 7 7 0\n",
+ "1 2 1 1 0\n",
+ "2 3 4 4 0\n",
+ "3 4 6 6 0\n",
+ "4 5 5 5 0\n",
+ ".. ... ... ... ...\n",
+ "585 595 2 2 0\n",
+ "586 596 2 2 0\n",
+ "587 597 3 3 0\n",
+ "588 598 1 1 0\n",
+ "589 599 4 4 0\n",
+ "\n",
+ "[590 rows x 4 columns]"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "may_counts = rental_count_month(june_df, 6, 2005)\n",
+ "june_counts = rental_count_month(june_df, 6, 2005)\n",
+ "\n",
+ "result = compare_rentals(may_counts, june_counts)\n",
+ "result"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "17f2be36-b8a4-4e05-9135-484215470705",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "aef1fa62-fcd2-4a24-8fe3-373129346735",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f26136db-0d4e-4e32-ad42-09c25c0cec70",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "d33cd019-9e3a-433f-b709-ce4dfef79310",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "60e39851-b6e3-4a07-b77a-b4931b09f22e",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python [conda env:base] *",
+ "language": "python",
+ "name": "conda-base-py"
+ },
+ "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
+}