Ravindra BagaleCourses & study guides मराठी Track your progress

24. How to Load SQL Query Results into a pandas DataFrame

24.7 Practice, Tip and Close

Why. Connection + query + DataFrame must feel boringly repeatable before interview day (Chapter 18) or project week (Chapter 16 style refreshes).

What. One lab: build SQLite orders, pull with parameters, summarise in pandas, export a tiny CSV (Chapter 22 skill).

How.

Chapter practice lab

  1. Recreate data/blinkit_lab.db with at least 12 fictional orders across the six Maharashtra cities (include Cancelled / Returned).
  2. Connect with sqlite3 and once with SQLAlchemy create_engine.
  3. Pull Delivered rows for Pune and Nashik using params= (no f-string values).
  4. In pandas, compute orders count and GMV by city; print median basket.
  5. Export outputs/sql_pull_city_gmv.csv with index=False.
  6. Write three bullets: why SQL filter, why params, what shape you got.
import sqlite3
from pathlib import Path

import pandas as pd
from sqlalchemy import create_engine

Path("data").mkdir(exist_ok=True)
Path("outputs").mkdir(exist_ok=True)

# If you already ran 24.3, you can skip recreate — or rebuild for a clean lab.
con = sqlite3.connect("data/blinkit_lab.db")
df = pd.read_sql_query(
    """
    SELECT city, amount_inr
    FROM orders
    WHERE status = ? AND city IN (?, ?)
    """,
    con,
    params=("Delivered", "Pune", "Nashik"),
)
con.close()

summary = (
    df.groupby("city", as_index=False)["amount_inr"]
    .agg(orders="count", gmv="sum", median_basket="median")
)
summary.to_csv("outputs/sql_pull_city_gmv.csv", index=False)
print(summary)

engine = create_engine("sqlite:///data/blinkit_lab.db")
smoke = pd.read_sql_query("SELECT COUNT(*) AS n FROM orders", engine)
print(smoke)
engine.dispose()

Practice task

Amir asks: “Only Kolhapur + Solapur, Delivered, amount ≥ ₹100, parameterized.” Produce the DataFrame and a one-line WhatsApp: city counts + GMV. No production URL.

Ravindra Bagale's Tip

SQL ne cut, pandas ne story, CSV/PNG ne share. Password Git madhe nahi. Samajla ka?

Thodkyaat sangaycha tar (quick recap)

  • SQL holds live tables; pandas is your analysis counter
  • Prefer read-only users; start with SQLite for class
  • read_sql_query → normal DataFrame
  • SQLAlchemy URLs make MySQL / Postgres look similar
  • Filter early in SQL on big tables; explore in pandas on extracts
  • Use params= — avoid f-string values; never load huge tables blind

Samajla ka? Aata SQL result seedha DataFrame madhe yenar — pudhe practice regular theva, lab DB var ek query/day.