Verbinden met de database¶
Als je met een database wilt werken zijn er drie opties.
Database van HBO-ICT¶
Op de HBO-ICT cloud staan je credentials om verbinding te maken met de HBO-ICT api.
Via MySQL
Openen in de browser
kan je phpMyAdmin
bereiken. Daar zie je ook de naam van je database. Dit is prefix
+ dev
of live
.
Flask gaat deze credentials uit een enviroment bestand (.env
) lezen. Dit bestand staat niet op gitlab, dat is niet veilig.
Creeer dus een .env
bestand. Soms staat dit al in het startproject als .env.example
. Pas dan de naam aan.
# Hier moet je eigen juiste credentials invullen
API_URL="https://api.hboooooooo-iiiiiiiiiiict.cloud"
API_KEY="ditkloptniet"
DATABASE="ditmoetjeveranderen"
Danger
Track bestanden zoals .env nooit met Git. Zodra het op Gitlab of Github staat is het heel lastig dit helemaal te verwijderen.
Er wordt op Gitlab en Github actief gezocht door hackers naar dit soort informatie. Gebruikt een .gitignore
bestand!
Controleer of je een bestand hebt app/settings.py
.
# app/settings.py
from os import environ
API_KEY = environ.get("API_KEY")
API_URL = environ.get("API_URL")
DATABASE = environ.get("DATABASE")
Controleer of onderstaande in de Flask app configuratie staat.
In app/db.py
kan je zien hoe de credentials worden gebruikt om een HTTP
request te sturen naar de HBO-ICT
API
Lokaal een database gebruiken¶
Zoek op internet hoe je dit doet.
Database met Docker¶
Warning
Deze methode is moeilijker dan werken met HBO-ICT.cloud
Installeer Docker en test of dit goed werkt.
Maak naast app
een directory instance
en db
aan.
Maak een file db/docker-compose.yml
aan
volumes:
data:
services:
db:
image: mariadb:latest
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: Who_Pays_What
MYSQL_USER: WhoPaysWhatUser
MYSQL_PASSWORD: Whopayswhat1
volumes:
- data:/var/lib/mysql
- .:/docker-entrypoint-initdb.d
ports:
- "3306:3306"
en ook een bestand db/schema.sql
. Deze wordt automatisch gerunned bij het starten van de container. Met bijvoorbeeld
DROP SCHEMA IF EXISTS `Who_Pays_What`;
CREATE SCHEMA `Who_Pays_What`;
USE `Who_Pays_What`;
CREATE TABLE `Participant`(
`participantId` INT NOT NULL AUTO_INCREMENT,
`firstname` VARCHAR(50),
`lastname` VARCHAR(100),
`emailaddress` VARCHAR(250),
`isOrganizer` BIT,
`telephonenumber` VARCHAR(15),
PRIMARY KEY(`participantId`)
);
INSERT INTO `Participant`(`firstname`, `lastname`, `telephonenumber`) VALUES('Elisa', 'Jansen', '020999666420');
INSERT INTO `Participant`(`firstname`, `lastname`, `emailaddress`) VALUES('Suhayb', 'El Gouch','s.el.gouch@hva.nl');
Maak een bestand instance/db.config
Question
Zie je dat de database gegevens steeds terugkomen?
Zorg dat Flask ook een connectie kan maken met deze database. In __init__.py
from configparser import ConfigParser
parser = ConfigParser()
parser.read("instance/db.config")
app.config["MYSQL_CONFIG"] = dict(parser.items("mysql"))
Nu kan je binnen Flask een query sturen. Bijvoorbeeld
from flask import current_app
import mysql.connector
# Establish database connection
config = current_app.config["MYSQL_CONFIG"]
db = mysql.connector.connect(**config)
cursor = connection.cursor(dictionary=True, buffered=True)
# build and execute query
query = "SELECT firstname FROM Participant WHERE lastname=? and telephonenumber=?"
values = ("Jansen", "020999666420")
cursor.execute(query, values)
result = cursor.fetchone() # "Elisa"
cursor.close()
Danger
Gebruik de methode met de vraagtekens om je query te maken. Gebruik geen string-formatting, dit is een beveilingsrisico!
Start nu de database. Dit doen we met behulp van een zogenaamde container techniek: Docker. Ga in de terminal met het commando $ cd db
naar de db
directory. Geef daar het commando $ docker compose up
. Je zult nu een download zien en daarna een lange lijst met opstart regels.
!!! failure Foutmelding?
Dit kan een aantal oorzaken hebben. Voorkomend zijn:
- je zit niet in de juiste directory: geef dit commando in de db
directory, alleen daar werkt het
- je docker engine draait niet. Herstart docker desktop of de service (Mac)
- je werkt niet met voldoende rechten. Windows 10+: open een Powershell met adminstrator rights. Ga naar de juiste directory met het cd
commando. Voer daar nogmaals docker compose up uit.
Succes
Je database draait nu. Ga in de terminal terug naar de main directory, met het commando $ cd ..
(de 2 puntjes betekenen: 1 niveau hoger).