Функции подключения к базе данных и операции с ней
Утилита-функции будет обрабатывать подключения к базе данных, проверять валидность URL-адресов, обновлять счетчики браузеров и платформ, а также генерировать случайные токены для сокращенных URL-адресов.
Подключение к базе данных
Сначала вы настроите подключение к базе данных с использованием pymysql
. Это至关重要 для взаимодействия вашего Flask-приложения с базой данных MySQL.
В utils.py
добавьте следующий 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:
"""Создает и возвращает новое подключение к базе данных."""
return pymysql.connect(**db_config)
- Библиотека
pymysql
используется для подключения к базе данных MySQL. Эта библиотека позволяет Python-приложениям взаимодействовать с базами данных MySQL с использованием простого API.
- Словарь
db_config
содержит параметры подключения к базе данных, такие как хост, пользователь, пароль и имя базы данных. Эти параметры импортируются из отдельного модуля config
,大概是出于更好的安全性和模块化考虑。Разделение настроек позволяет更容易进行调整,而无需修改主要的代码库。
- Функция
get_db_connection()
создает и возвращает новое подключение к базе данных с использованием функции pymysql.connect(**db_config)
. Синтаксис **db_config
используется для распаковки словаря в именованные аргументы.
Функции операций с базой данных
После установления подключения к базе данных следующим шагом является создание функций, которые выполняют операции с базой данных. Это включает перечисление данных для заданного сокращенного URL-адреса и обновление счетчиков на основе использования браузера и платформы.
В utils.py
добавьте следующий Python-код:
def list_data(shorty_url: str) -> tuple:
"""
Принимает short_url в качестве входных данных.
Возвращает счетчик, браузер, количество обращений по платформам.
"""
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:
"""Обновляет счетчики браузера и платформы в базе данных для заданного 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))
- Функция
list_data(shorty_url)
предназначена для извлечения различных частей информации из таблицы WEB_URL
для заданного сокращенного URL-адреса (shorty_url
). Она устанавливает соединение с базой данных и выполняет четыре SQL-запроса для извлечения исходного URL-адреса, связанного тега, счетчика доступов, информации о браузере и платформе. Каждый запрос выполняется отдельно, и результаты извлекаются и возвращаются.
- Функция
update_counters(cursor, short_url, browser_dict, platform_dict)
обновляет счетчик доступов, информацию о браузере и платформе для заданного сокращенного URL-адреса в базе данных. Эта функция принимает курсор базы данных, сокращенный URL-адрес и два словаря, содержащих подсчеты для каждого браузера и платформы, в качестве аргументов. Она строит SQL-запрос UPDATE
, чтобы увеличить счетчики для сокращенного URL-адреса на основе предоставленных данных. Функция предполагает, что информация о браузере и платформе была определена перед вызовом этой функции, и что эта информация передается в виде словарей (browser_dict
и platform_dict
), с ключами, соответствующими столбцам в таблице WEB_URL
.
Это стандартная схема для веб-приложений, использующих Flask и MySQL, где определяются утилита-функции для общих операций с базой данных. Затем эти функции могут быть импортированы и использованы в приложении для взаимодействия с базой данных, выделяя непосредственный доступ к базе данных и SQL-запросы от основной логики приложения.