Funciones de conexión y operación de la base de datos
Las funciones de utilidad manejarán las conexiones a la base de datos, las validaciones de URL, la actualización de los contadores de navegador y plataforma y la generación de tokens aleatorios para las URL cortas.
Conexión a la base de datos
Primero, configurará la conexión a la base de datos usando pymysql
. Esto es crucial para permitir que su aplicación Flask interactúe con la base de datos MySQL.
En utils.py
, agregue el siguiente código de Python:
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:
"""Crea y devuelve una nueva conexión a la base de datos."""
return pymysql.connect(**db_config)
- La librería
pymysql
se utiliza para conectarse a la base de datos MySQL. Esta librería permite que las aplicaciones de Python interactúen con las bases de datos MySQL usando una API simple.
- El diccionario
db_config
contiene los parámetros de conexión a la base de datos, como host, usuario, contraseña y nombre de la base de datos. Estos se importan de un módulo config
separado, presumiblemente para mayor seguridad y modularidad. Mantener las configuraciones separadas permite ajustes más fáciles sin modificar la base de código principal.
- La función
get_db_connection()
crea y devuelve una nueva conexión a la base de datos usando la función pymysql.connect(**db_config)
. La sintaxis **db_config
se utiliza para desempaquetar el diccionario en argumentos de palabras clave.
Funciones de operación de la base de datos
Después de establecer una conexión a la base de datos, el siguiente paso implica crear funciones que realicen operaciones en la base de datos. Estas incluyen listar datos para una URL corta dada y actualizar los contadores basados en el uso del navegador y la plataforma.
En utils.py
, agregue el siguiente código de Python:
def list_data(shorty_url: str) -> tuple:
"""
Toma short_url como entrada.
Devuelve contador, navegador, marcas de tiempo de plataforma.
"""
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:
"""Actualiza los contadores de navegador y plataforma en la base de datos para la short_url dada."""
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))
- La función
list_data(shorty_url)
está diseñada para recuperar varios tipos de información de la tabla WEB_URL
para una URL corta dada (shorty_url
). Establece una conexión a la base de datos y ejecuta cuatro consultas SQL para obtener la URL original, la etiqueta asociada, el contador de acceso, el navegador y la información analítica de la plataforma. Cada consulta se ejecuta por separado, y los resultados se recuperan y devuelven.
- La función
update_counters(cursor, short_url, browser_dict, platform_dict)
actualiza el contador de acceso, el navegador y los conteos de plataforma para una URL corta dada en la base de datos. Esta función toma un cursor de base de datos, la URL corta y dos diccionarios que contienen los conteos para cada navegador y plataforma como argumentos. Construye una declaración SQL UPDATE
para incrementar los contadores para la URL corta basada en los datos proporcionados. La función asume que la información del navegador y la plataforma se ha determinado previamente antes de llamar a esta función, y que esta información se pasa como diccionarios (browser_dict
y platform_dict
), con claves que corresponden a las columnas en la tabla WEB_URL
.
Esta configuración es un patrón típico para aplicaciones web que usan Flask y MySQL, donde se definen funciones de utilidad para las operaciones comunes de la base de datos. Estas funciones luego se pueden importar y usar en toda la aplicación para interactuar con la base de datos, abstraiendo el acceso directo a la base de datos y las consultas SQL de la lógica principal de la aplicación.