Python PostgreSQL Tutorial – Filtering Records with WHERE Clause
Last updated 6 months ago | 401 views 75 5
In real-world applications, retrieving all rows from a database is rarely useful. The WHERE clause lets you filter records based on conditions. In this tutorial, you'll learn how to use WHERE in PostgreSQL queries via Python using the psycopg2 library.
Table of Contents
-
What You’ll Learn
-
Prerequisites
-
Setting Up the Environment
-
Using
WHEREto Filter Data -
Common
WHEREConditions -
Full Example with Multiple Filters
-
Tips and Common Pitfalls
1. What You’ll Learn
-
How to use the
WHEREclause in SQL queries with Python -
How to pass dynamic values safely using parameters
-
How to combine multiple conditions
-
Best practices for query security and performance
✅ 2. Prerequisites
You’ll need:
-
Python installed
-
PostgreSQL installed and running
-
A table (e.g.,
students) created and populated -
psycopg2installed:
pip install psycopg2-binary
3. Setting Up the Environment
Assume a table named students:
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
age INT,
grade VARCHAR(10)
);
And some sample data:
INSERT INTO students (name, age, grade)
VALUES
('Alice', 14, '8th'),
('Bob', 13, '7th'),
('Carol', 15, '9th'),
('David', 14, '8th');
4. Using WHERE to Filter Data
Example: Select students with age 14
import psycopg2
conn = psycopg2.connect(
dbname="school",
user="postgres",
password="your_password",
host="localhost",
port="5432"
)
cur = conn.cursor()
cur.execute("SELECT * FROM students WHERE age = %s", (14,))
rows = cur.fetchall()
for row in rows:
print(row)
cur.close()
conn.close()
✅ The
%splaceholder is a parameter — it protects against SQL injection.
⚙️ 5. Common WHERE Conditions
| Condition | Example Usage |
|---|---|
| Equals | age = 14 |
| Not Equals | age != 14 or age <> 14 |
| Greater Than | age > 13 |
| Less Than | age < 15 |
| LIKE | name LIKE 'A%' (names starting with "A") |
| IN | grade IN ('7th', '8th') |
| BETWEEN | age BETWEEN 13 AND 15 |
Using Multiple Conditions
cur.execute("""
SELECT * FROM students
WHERE age = %s AND grade = %s
""", (14, '8th'))
6. Full Example with Multiple Filters
import psycopg2
try:
conn = psycopg2.connect(
dbname="school",
user="postgres",
password="your_password",
host="localhost",
port="5432"
)
cur = conn.cursor()
# Filter students with age 14 and grade '8th'
cur.execute("""
SELECT * FROM students
WHERE age = %s AND grade = %s
""", (14, '8th'))
rows = cur.fetchall()
print("Filtered Students:")
for row in rows:
print(f"ID: {row[0]}, Name: {row[1]}, Age: {row[2]}, Grade: {row[3]}")
cur.close()
conn.close()
except psycopg2.Error as e:
print("Database error:", e)
7. Tips and Common Pitfalls
| Tip / Pitfall | Advice |
|---|---|
| ✅ Use parameterized queries | Prevents SQL injection attacks |
| ❌ Don’t hard-code user inputs | Always pass values via parameters |
✅ Combine filters with AND/OR wisely |
Avoid complex, unreadable queries |
| ✅ Use indexes on filtered columns | Boost performance for large datasets |
❌ Avoid SELECT * in production |
Select only necessary columns for better performance |
Conclusion
The WHERE clause is essential for precise data retrieval in SQL. With Python and psycopg2, it's easy to construct secure, efficient queries. Whether filtering by age, grade, or more complex criteria, WHERE gives you the flexibility and power to handle your data effectively.