Datenbankverbindung und Betriebsfunktionen
Hilfsfunktionen werden die Datenbankverbindung, die URL-Validierung, die Aktualisierung der Browser- und Plattformzähler und die Generierung von Zufallstoken für verkürzte URLs handhaben.
Datenbankverbindung
Zunächst werden Sie die Datenbankverbindung mit pymysql
einrichten. Dies ist entscheidend, um Ihre Flask-Anwendung mit der MySQL-Datenbank interagieren zu können.
Fügen Sie im Ordner utils.py
folgenden Python-Code hinzu:
from urllib.parse import urlparse
import random
import string
import pymysql
db_config = {
"host": "localhost",
"user": "root",
"password": "",
"db": "SHORTY"
}
def get_db_connection() -> pymysql.Connection:
"""Erstellt und gibt eine neue Datenbankverbindung zurück."""
return pymysql.connect(**db_config)
- Die
pymysql
-Bibliothek wird verwendet, um sich mit der MySQL-Datenbank zu verbinden. Diese Bibliothek ermöglicht es Python-Anwendungen, mit MySQL-Datenbanken über eine einfache API zu interagieren.
- Das
db_config
-Dictionary enthält die Datenbankverbindungsparameter wie Host, Benutzer, Passwort und Datenbankname. Diese werden aus einem separaten config
-Modul importiert, vermutlich zur besseren Sicherheit und Modularität. Das Trennen der Konfigurationsparameter ermöglicht einfachere Anpassungen ohne die Hauptcodebasis zu ändern.
- Die
get_db_connection()
-Funktion erstellt und gibt eine neue Verbindung zur Datenbank zurück, indem die pymysql.connect(**db_config)
-Funktion verwendet wird. Die **db_config
-Syntax wird verwendet, um das Dictionary in Schlüsselwortargumente zu entpacken.
Datenbankbetriebsfunktionen
Nachdem eine Datenbankverbindung hergestellt wurde, folgt der nächste Schritt, die Erstellung von Funktionen, die Operationen auf der Datenbank ausführen. Dazu gehören das Auflisten von Daten für eine gegebene verkürzte URL und die Aktualisierung der Zähler basierend auf der Browser- und Plattformnutzung.
Fügen Sie im Ordner utils.py
folgenden Python-Code hinzu:
def list_data(shorty_url: str) -> tuple:
"""
Nimmt die verkürzte URL als Eingabe.
Gibt Zähler, Browser, Plattform-Zählungen zurück.
"""
with get_db_connection() as conn, conn.cursor() as cursor:
su = [shorty_url]
info_sql = "SELECT URL, S_URL, TAG FROM WEB_URL WHERE S_URL = %s; "
counter_sql = "SELECT COUNTER FROM WEB_URL WHERE S_URL = %s; "
browser_sql = "SELECT CHROME, FIREFOX, SAFARI, OTHER_BROWSER FROM WEB_URL WHERE S_URL = %s;"
platform_sql = "SELECT ANDROID, IOS, WINDOWS, LINUX, MAC, OTHER_PLATFORM FROM WEB_URL WHERE S_URL = %s;"
cursor.execute(info_sql, su)
info_fetch = cursor.fetchone()
cursor.execute(counter_sql, su)
counter_fetch = cursor.fetchone()
cursor.execute(browser_sql, su)
browser_fetch = cursor.fetchone()
cursor.execute(platform_sql, su)
platform_fetch = cursor.fetchone()
return info_fetch, counter_fetch, browser_fetch, platform_fetch
def update_counters(cursor: pymysql.Connection, short_url: str, browser_dict: dict, platform_dict: dict) -> None:
"""Aktualisiert die Browser- und Plattformzähler in der Datenbank für die gegebene verkürzte URL."""
counter_sql = """UPDATE WEB_URL SET COUNTER = COUNTER + 1,
CHROME = CHROME + %s, FIREFOX = FIREFOX + %s, SAFARI = SAFARI + %s, OTHER_BROWSER = OTHER_BROWSER + %s,
ANDROID = ANDROID + %s, IOS = IOS + %s, WINDOWS = WINDOWS + %s, LINUX = LINUX + %s, MAC = MAC + %s, OTHER_PLATFORM = OTHER_PLATFORM + %s
WHERE S_URL = %s;"""
cursor.execute(counter_sql, (browser_dict['chrome'], browser_dict['firefox'], browser_dict['safari'], browser_dict['other'],
platform_dict['android'], platform_dict['iphone'], platform_dict[
'windows'], platform_dict['linux'], platform_dict['macos'], platform_dict['other'],
short_url))
- Die
list_data(shorty_url)
-Funktion ist dazu bestimmt, verschiedene Informationen aus der WEB_URL
-Tabelle für eine gegebene verkürzte URL (shorty_url
) abzurufen. Sie etabliert eine Verbindung zur Datenbank und führt vier SQL-Abfragen aus, um die ursprüngliche URL, das zugehörige Tag, den Zugangszähler, den Browser und die Plattform-Analysen abzurufen. Jede Abfrage wird separat ausgeführt, und die Ergebnisse werden abgerufen und zurückgegeben.
- Die
update_counters(cursor, short_url, browser_dict, platform_dict)
-Funktion aktualisiert den Zugangszähler, den Browser und die Plattformzähler für eine gegebene verkürzte URL in der Datenbank. Diese Funktion nimmt einen Datenbankcursor, die verkürzte URL und zwei Dictionaries mit Zählungen für jeden Browser und jede Plattform als Argumente. Sie konstruiert einen UPDATE
-SQL-Befehl, um die Zähler für die verkürzte URL basierend auf den bereitgestellten Daten zu erhöhen. Die Funktion nimmt an, dass die Browser- und Plattforminformationen vor dem Aufruf dieser Funktion bestimmt wurden und dass diese Informationen als Dictionaries (browser_dict
und platform_dict
) übergeben werden, mit Schlüsseln, die den Spalten in der WEB_URL
-Tabelle entsprechen.
Dieser Aufbau ist ein typisches Muster für Webanwendungen, die Flask und MySQL verwenden, wobei Hilfsfunktionen für häufige Datenbankoperationen definiert werden. Diese Funktionen können dann importiert und im gesamten Anwendungsbereich verwendet werden, um mit der Datenbank zu interagieren, indem der direkte Datenbankzugang und die SQL-Abfragen von der Hauptanwendungslogik abstrahiert werden.