Skip to content
ICT Fusion Knowledgebase

Python en SQL

Wanneer jij data uit je database wil halen maak je gebruik van SQL, net als jij dat kan, kan Python dat ook.

Op deze pagina ga je leren hoe je vanuit Python een verbinding kan maken met je MySQL Database en hoe je vervolgens data in je database kan stoppen en data uit je database kunt halen.

Verbinden met je database

Binnen je applicatie moet je eerste verbinding maken met je database voordat je queries kan uitvoeren op je database. Voorkom dat je telkens een nieuwe verbinding maakt, maak houd de verbinding open zolang je applicatie draait.

Benodigde Python package

In het project ‘HBO-ICT x Studiekiezers’ staat Flask-MySQLdb al in requirements.txt. Omdat je met Docker werkt, worden de requirements automatisch tijdens de Docker build geïnstalleerd. Je hoeft dus lokaal geen pip install te draaien.

Tip: Flask-MySQLdb levert de MySQLdb-binding, waardoor je in code gewoon import MySQLdb kunt gebruiken.

Eenvoudige connectie-functie

Onderstaande functie maakt een verbinding met MySQL/MariaDB. Je ziet deze aanpak ook terug in het starterproject.

import MySQLdb

def db_connect(host, user, password, database):
    try:
        connection = MySQLdb.connect(
            host=host,
            user=user,
            password=password,
            db=database,
        )
        return connection
    except MySQLdb.Error as e:
        print(f"Error connecting to the database: {e}")
        return None

Gebruik met omgevingsvariabelen (zoals in Flask):

import os

db = db_connect(
    host=os.getenv('MYSQL_HOST', 'mariadb'),
    user=os.getenv('MYSQL_USER', 'root'),
    password=os.getenv('MYSQL_PASSWORD', ''),
    database=os.getenv('MYSQL_DATABASE', '')
)

Belangrijk:

  • Houd één verbinding (db) aan zolang je app draait (zoals bij Flask start).
  • Maak per query een cursor en sluit die na gebruik.

SELECT-queries uitvoeren

Nu je een database verbinding hebt (de variabele db die je hebt gemaakt in de vorige sectie), kan je queries uitvoeren op je database.

Wanneer je bijvoorbeeld een tabel ‘users’ hebt en je wilt hieruit de eerste rij ophalen dan kan je dat als volgt doen:

cursor = db.cursor()
cursor.execute("SELECT * FROM users")
user = cursor.fetchone()
print(user)

Als je alle rijen uit de tabel ‘users’ wilt ophalen dan kan je dat als volgt doen:

cursor = db.cursor()
cursor.execute("SELECT * FROM users")
users = cursor.fetchall()
for user in users:
    print(user)

Wil je alle gebruikers ophalen met een bepaalde naam dan kan je dat als volgt doen:

cursor = db.cursor()
cursor.execute("SELECT * FROM users WHERE name = %s", ("Bas",))
users = cursor.fetchall()
for user in users:
    print(user)

Wil je van deze gebruikers netjes de naam printen dan kan je dat als volgt doen:

cursor = db.cursor()
cursor.execute("SELECT name FROM users WHERE name = %s", ("Jorrit",))
users = cursor.fetchall()
for user in users:
    print(user[0])

Of nog netter:

cursor = db.cursor()
cursor.execute("SELECT name FROM users WHERE name = %s", ("Jorrit",))
users = cursor.fetchall()
for (name,) in users:
    print(name)

INSERT queries uitvoeren

Wanneer je data in je database wilt stoppen, dan kan je dat als volgt doen:

cursor = db.cursor()
cursor.execute("INSERT INTO users (name) VALUES (%s)", ("Jorrit",))
db.commit()

Belangrijk is dat je bij mutaties (inserts, updates, …) je database commit. Dit doe je met de commit() methode.