Cum să interoghezi baze de date din Python
In this tutorial, you'll learn about Cum să interoghezi baze de date din Python. We cover key concepts, practical examples, and best practices.
Interogarea bazelor de date din Python se face cu pandas.read_sql și SQLAlchemy, permițând extragerea directă a rezultatelor SQL în DataFrame-uri gata de analiză.
The Problem
Conectarea manuală la baze de date, executarea interogărilor și parsarea rândurilor în structuri Python necesită mult cod boilerplate. În plus, fiecare tip de bază de date (PostgreSQL, MySQL, SQLite) are un driver diferit, ceea ce complică și mai mult procesul.
The Wrong Way
import sqlite3
import pandas as pd
conn = sqlite3.connect("date.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM vanzari")
rows = cursor.fetchall()
columns = [desc[0] for desc in cursor.description]
df = pd.DataFrame(rows, columns=columns)
conn.close()
Problemă: Mult cod manual, predispus la erori. Pentru fiecare interogare trebuie să repeți același tipar.
The Right Way
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine("sqlite:///date.db")
df = pd.read_sql("SELECT * FROM vanzari", engine)
print(df.head())
Output:
id produs pret cantitate
0 1 Laptop 3500 10
1 2 Mouse 150 50
2 3 Monitor 1200 20
Step-by-Step Fix
1. Creează conexiunea cu SQLAlchemy
# PostgreSQL
engine = create_engine("postgresql://user:pass@localhost:5432/bd")
# MySQL
engine = create_engine("mysql+pymysql://user:pass@localhost:3306/bd")
# SQLite
engine = create_engine("sqlite:///cale/catre/fisier.db")
2. Scrie interogarea și citește în DataFrame
query = """
SELECT c.nume, SUM(v.total) as total_vanzari
FROM vanzari v
JOIN clienti c ON v.client_id = c.id
GROUP BY c.nume
ORDER BY total_vanzari DESC
"""
df = pd.read_sql(query, engine)
3. Scrie rezultatele înapoi în bază
df.to_sql("raport_vanzari", engine, if_exists="replace", index=False)
Prevention Tips
- Folosește SQLAlchemy — abstractizează diferențele între bazele de date
- Parametrizează interogările cu
paramspentru a preveni SQL injection - Închide conexiunile cu
engine.dispose()după utilizare
Common Mistakes
- Șiruri de conectare hardcodate — folosește variabile de mediu
- Fără parametrizare — risc de SQL injection când concatenezi direct în query
if_exists="fail"la scriere — eroare dacă tabela există deja; folosește"replace"sau"append"- Index salvat în SQL — setează
index=Falselato_sql - Conexiuni neînchise — epuizează pool-ul de conexiuni
FAQ
Construit de dezvoltătorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu SQL și pandas pentru productivitate și securitate sporite.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro