Conexão com o Banco de Dados e Funções de Operação
Funções utilitárias lidarão com conexões de banco de dados, validações de URL, atualização de contadores de navegador e plataforma, e geração de tokens aleatórios para URLs curtas.
Conexão com o Banco de Dados
Primeiro, você configurará a conexão com o banco de dados usando pymysql. Isso é crucial para permitir que sua aplicação Flask interaja com o banco de dados MySQL.
Em utils.py, adicione o seguinte código 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:
"""Create and return a new database connection."""
return pymysql.connect(**db_config)
- A biblioteca
pymysql é usada para conectar ao banco de dados MySQL. Esta biblioteca permite que aplicações Python interajam com bancos de dados MySQL usando uma API simples.
- O dicionário
db_config contém parâmetros de conexão com o banco de dados, como host, usuário, senha e nome do banco de dados. Estes são importados de um módulo config separado, presumivelmente para melhor segurança e modularidade. Manter as configurações separadas permite ajustes mais fáceis sem modificar o código base principal.
- A função
get_db_connection() cria e retorna uma nova conexão com o banco de dados usando a função pymysql.connect(**db_config). A sintaxe **db_config é usada para desempacotar o dicionário em argumentos de palavra-chave.
Funções de Operação do Banco de Dados
Após estabelecer uma conexão com o banco de dados, a próxima etapa envolve a criação de funções que realizam operações no banco de dados. Isso inclui listar dados para uma determinada URL curta e atualizar contadores com base no uso do navegador e da plataforma.
Em utils.py, adicione o seguinte código Python:
def list_data(shorty_url: str) -> tuple:
"""
Takes short_url for input.
Returns counter , browser , platform ticks.
"""
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:
"""Update browser and platform counters in the database for the given short_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))
- A função
list_data(shorty_url) foi projetada para recuperar várias informações da tabela WEB_URL para uma determinada URL curta (shorty_url). Ela estabelece uma conexão com o banco de dados e executa quatro consultas SQL para buscar a URL original, a tag associada, o contador de acesso, o navegador e as análises da plataforma. Cada consulta é executada separadamente, e os resultados são buscados e retornados.
- A função
update_counters(cursor, short_url, browser_dict, platform_dict) atualiza o contador de acesso, o navegador e as contagens da plataforma para uma determinada URL curta no banco de dados. Esta função recebe um cursor do banco de dados, a URL curta e dois dicionários contendo contagens para cada navegador e plataforma como argumentos. Ela constrói uma instrução SQL UPDATE para incrementar os contadores para a URL curta com base nos dados fornecidos. A função assume que as informações do navegador e da plataforma foram determinadas antes de chamar esta função, e que essas informações são passadas como dicionários (browser_dict e platform_dict), com chaves correspondentes às colunas na tabela WEB_URL.
Esta configuração é um padrão típico para aplicações web usando Flask e MySQL, onde funções utilitárias são definidas para operações comuns de banco de dados. Essas funções podem então ser importadas e usadas em toda a aplicação para interagir com o banco de dados, abstraindo o acesso direto ao banco de dados e as consultas SQL da lógica principal da aplicação.