Installation in Thonny
- Menupunkt
Tools>Manage Packages... - Suche nach «PyMySql»
- Install klicken
# Verbindung herstellen
Mit der Methode pymysql.connect() können wir eine Verbindung zu einem MySQL-Server herstellen. Dazu müssen wir Hostnamen des Servers, Name und Passwort des DB-Benutzers, Name der Datenbank, sowie den Zeichensatz und die Art des Ergebnisses kennen. Hierfür verwenden wir die Klasse pymysql.cursors.DictCursor. So erhalten wir die Ergebnis-Datensätze in Form eines Python-Dictionary, welchen wir in den Jinja-Templates weiterverwenden können.
import pymysql.cursors
def connect_db():
connection = pymysql.connect(host='web3.gymkirchenfeld.ch',
user='thetvdb',
password='N08lzUvOjQpKu8Pp',
db='thetvdb',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
return connection
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# Abfragen ausführen
Die von connect_db() zurückgegebene Verbindung kann dann in den unterschiedlichen Methoden verwendet werden:
from flask import Flask, request
import pymysql.cursors
app = Flask(__name__)
def connect_db():
connection = pymysql.connect(host='web3.gymkirchenfeld.ch',
user='thetvdb',
password='N08lzUvOjQpKu8Pp',
db='thetvdb',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
return connection
@app.route("/test_search")
def test_search():
suche = "lost"
result = []
try:
connection = connect_db()
with connection.cursor() as cursor:
sql = "SELECT * FROM tvseries WHERE seriesname LIKE %s"
cursor.execute(sql, ("%"+suche+"%",))
result = cursor.fetchall()
finally:
connection.close()
return str(result)
@app.route("/test_details")
def test_details():
id = 73739
try:
connection = connect_db()
with connection.cursor() as cursor:
sql = "SELECT * FROM tvseries WHERE id=%s"
cursor.execute(sql, (id,))
serie = cursor.fetchone()
finally:
connection.close()
return str(serie)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
- Die beiden Methoden
test_search()undtest_details()verwenden beide unsere eigene Funktionconnect_db()um eine Verbindung zur Datenbank aufzubauen. - Da beim Zugriff auf die Datenbank etwas schieflaufen könnte, wird dieser Teil in einen
try-Block gestellt. - Die SQL-Anfrage wird zuerst als String vorbereitet. Für die Benutzereingabe wird der Platzhalter
%sverwendet. - Beim Aufruf der Funktion
execute()wird neben dem SQL-String eine Liste von Elementen mitgegeben. Diese Elemente werden der Reihenfolge nacheinander in die SQL-Abfrage an die Stelle der Platzhalter%seingesetzt. Dabei werden automatisch Massnahmen gegen Attacken per SQL-Injection vorgenommen.
Weil unsere Liste nur aus einem Element besteht, müssen wir ein Komma hintenanstellen, damit Python merkt, dass es sich um eine Liste handelt. - Die Resultate liegen jetzt bereit. Sie können als Dictionary mit
fetchone()oder als Liste von Dictionariesfetchall()abgeholt werden.
Als Alternative zufetchall()existiertcursor.fetchmany(20). Hiermit kann man die Anzahl der Ergebnisse auf 20 limitieren (natürlich kann man eine beliebige Zahl einsetzten.) - Im zum
try-Block gehörendenfinally-Block wird die Verbindung zur Datenbank geschlossen. Derfinally-Block wird in jedem Fall ausgeführt, egal ob imtry-Block alles geklappt hat oder nicht. - Schlussendlich können die Ergebnisse weiterverwendet werden. Im Beispiel werden sie einfach in Text umgewandelt und zurückgegeben.
- Offizielle Dokumentation
- https://pymysql.readthedocs.io/en/latest/ (opens new window)
← Flask Jinja-Templates →