Bird
Raised Fist0
Pandasdata~20 mins

Pandas with SQL databases - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Pandas SQL Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this pandas SQL query?
Given a SQLite database connection, what will be the output of the following code snippet?
Pandas
import sqlite3
import pandas as pd

conn = sqlite3.connect(':memory:')
conn.execute('CREATE TABLE sales (id INTEGER, amount INTEGER)')
conn.execute('INSERT INTO sales VALUES (1, 100), (2, 200), (3, 300)')
df = pd.read_sql_query('SELECT * FROM sales WHERE amount > 150', conn)
print(df)
A
Empty DataFrame
Columns: [id, amount]
Index: []
B
   id  amount
0   1     100
1   2     200
2   3     300
C
   id  amount
0   2     200
1   3     300
D
   id  amount
0   1     100
Attempts:
2 left
💡 Hint
Look at the SQL WHERE clause filtering amounts greater than 150.
❓ data_output
intermediate
1:30remaining
How many rows does this DataFrame have after reading from SQL?
Consider this code that reads data from a SQL table into a pandas DataFrame. How many rows will the DataFrame contain?
Pandas
import sqlite3
import pandas as pd

conn = sqlite3.connect(':memory:')
conn.execute('CREATE TABLE employees (name TEXT, age INTEGER)')
conn.execute("INSERT INTO employees VALUES ('Alice', 30), ('Bob', 25), ('Charlie', 35)")
df = pd.read_sql_query('SELECT * FROM employees WHERE age >= 30', conn)
print(len(df))
A2
B3
C1
D0
Attempts:
2 left
💡 Hint
Check which employees have age 30 or more.
🔧 Debug
advanced
2:00remaining
What error does this code raise when reading SQL into pandas?
This code tries to read data from a SQL database into a pandas DataFrame. What error will it raise?
Pandas
import pandas as pd

query = 'SELECT * FROM orders'
df = pd.read_sql_query(query, 'not_a_connection')
AAttributeError: 'str' object has no attribute 'execute'
BTypeError: argument 2 must be a sqlite3.Connection or SQLAlchemy connectable
CNameError: name 'orders' is not defined
DValueError: SQL query is empty
Attempts:
2 left
💡 Hint
The second argument to read_sql_query must be a connection object, not a string.
🚀 Application
advanced
2:30remaining
Which option correctly writes a DataFrame to a SQL table?
You have a pandas DataFrame df and a SQLite connection conn. Which code snippet correctly writes df to a SQL table named 'products'?
Pandas
import sqlite3
import pandas as pd

conn = sqlite3.connect(':memory:')
df = pd.DataFrame({'product': ['A', 'B'], 'price': [10, 20]})
Aconn.to_sql(df, 'products', if_exists='replace')
Bdf.to_sql('products', conn, if_exists='replace', index=False)
Cpd.to_sql(df, 'products', conn)
Ddf.write_sql('products', conn)
Attempts:
2 left
💡 Hint
Check the pandas DataFrame method to_sql and its parameters.
🧠 Conceptual
expert
3:00remaining
Why use pandas with SQL databases in data science?
Which of the following is the best reason to use pandas with SQL databases in data science workflows?
ATo perform fast in-memory computations on large datasets without any disk I/O
BTo avoid learning SQL by using pandas methods only
CTo replace SQL databases entirely with pandas DataFrames for all data storage needs
DTo combine the power of SQL for data retrieval with pandas for flexible data manipulation and analysis
Attempts:
2 left
💡 Hint
Think about the strengths of SQL and pandas and how they complement each other.

Practice

(1/5)
1. What is the main purpose of using pandas.read_sql() when working with SQL databases?
easy
A. To read data from a SQL database into a pandas DataFrame
B. To write a pandas DataFrame into a SQL database
C. To create a new SQL database
D. To delete tables from a SQL database

Solution

  1. Step 1: Understand the function purpose

    pandas.read_sql() is designed to read data from a SQL query or table.
  2. Step 2: Match function to action

    Reading data means loading it into a pandas DataFrame for analysis.
  3. Final Answer:

    To read data from a SQL database into a pandas DataFrame -> Option A
  4. Quick Check:

    read_sql() = read data [OK]
Hint: read_sql reads data into DataFrame fast [OK]
Common Mistakes:
  • Confusing read_sql with to_sql
  • Thinking it creates or deletes databases
  • Assuming it writes data instead of reading
2. Which of the following is the correct way to create a connection engine to a SQLite database named data.db using SQLAlchemy for pandas?
easy
A. engine = create_engine('sqlite://data.db')
B. engine = create_engine('sqlite:///data.db')
C. engine = create_engine('sqlite:data.db')
D. engine = create_engine('sqlite:/data.db')

Solution

  1. Step 1: Recall SQLite connection string format

    SQLite uses the format 'sqlite:///' followed by the database file path.
  2. Step 2: Match correct syntax

    engine = create_engine('sqlite:///data.db') uses 'sqlite:///data.db' which is the correct format for a local file.
  3. Final Answer:

    engine = create_engine('sqlite:///data.db') -> Option B
  4. Quick Check:

    SQLite engine needs three slashes [OK]
Hint: SQLite needs three slashes in connection string [OK]
Common Mistakes:
  • Using two slashes instead of three
  • Missing slashes or colon
  • Confusing with other database connection formats
3. Given the following code, what will be the output of print(df.shape)?
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine('sqlite:///test.db')
df = pd.read_sql('SELECT * FROM users WHERE age > 30', engine)
medium
A. (0, 0) because no data is returned
B. (total_rows_in_users_table, number_of_columns_in_users_table)
C. An error because of incorrect SQL syntax
D. (number_of_rows_with_age_greater_than_30, number_of_columns_in_users_table)

Solution

  1. Step 1: Understand the SQL query

    The query selects all columns from 'users' where age is greater than 30, so only matching rows are returned.
  2. Step 2: Understand pandas DataFrame shape

    The DataFrame shape is (rows, columns). Rows = filtered rows, columns = all columns from 'users'.
  3. Final Answer:

    (number_of_rows_with_age_greater_than_30, number_of_columns_in_users_table) -> Option D
  4. Quick Check:

    Filtered rows and all columns = shape [OK]
Hint: DataFrame shape = filtered rows, all columns [OK]
Common Mistakes:
  • Assuming all rows are returned
  • Thinking shape returns data content
  • Confusing SQL syntax with pandas syntax
4. What is wrong with this code snippet that tries to write a DataFrame df to a SQL table named sales?
from sqlalchemy import create_engine
engine = create_engine('sqlite:///sales.db')
df.to_sql('sales', engine)
medium
A. Missing the argument if_exists to handle existing tables
B. The engine connection string is incorrect
C. to_sql cannot write to SQLite databases
D. DataFrame df must be converted to a list first

Solution

  1. Step 1: Check to_sql default behavior

    By default, to_sql will raise an error if the table exists unless if_exists is set.
  2. Step 2: Identify missing argument

    The code lacks if_exists='replace' or if_exists='append' to avoid errors on existing tables.
  3. Final Answer:

    Missing the argument if_exists to handle existing tables -> Option A
  4. Quick Check:

    to_sql needs if_exists for existing tables [OK]
Hint: Add if_exists='replace' or 'append' to avoid errors [OK]
Common Mistakes:
  • Assuming to_sql always overwrites
  • Thinking engine string is wrong
  • Believing DataFrame must convert before writing
5. You want to load data from a SQL database into pandas, filter rows where status = 'active', and then write only these filtered rows back to a new SQL table named active_users. Which sequence of commands correctly achieves this?
hard
A. df = pd.read_sql('SELECT * FROM users WHERE status = "active"', engine) df.to_sql('active_users', engine, if_exists='append')
B. df = pd.read_sql('SELECT * FROM users WHERE status = active', engine) df.to_sql('active_users', engine)
C. df = pd.read_sql('SELECT * FROM users', engine) df_filtered = df[df['status'] == 'active'] df_filtered.to_sql('active_users', engine, if_exists='replace')
D. df = pd.read_sql('SELECT * FROM users', engine) df_filtered = df[df.status = 'active'] df_filtered.to_sql('active_users', engine)

Solution

  1. Step 1: Read all data and filter in pandas

    df = pd.read_sql('SELECT * FROM users', engine) df_filtered = df[df['status'] == 'active'] df_filtered.to_sql('active_users', engine, if_exists='replace') reads all users, then filters rows where status equals 'active' using correct pandas syntax.
  2. Step 2: Write filtered data with proper if_exists argument

    df = pd.read_sql('SELECT * FROM users', engine) df_filtered = df[df['status'] == 'active'] df_filtered.to_sql('active_users', engine, if_exists='replace') writes filtered data to 'active_users' table, replacing if it exists, avoiding errors.
  3. Final Answer:

    df = pd.read_sql('SELECT * FROM users', engine) df_filtered = df[df['status'] == 'active'] df_filtered.to_sql('active_users', engine, if_exists='replace') -> Option C
  4. Quick Check:

    Read all, filter in pandas, write with if_exists [OK]
Hint: Filter in pandas, use if_exists='replace' when writing [OK]
Common Mistakes:
  • Incorrect SQL syntax in WHERE clause
  • Using single equals (=) in pandas filter
  • Missing if_exists argument causing errors
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard