데이터베이스 연결 및 기능 작동
유틸리티 함수는 데이터베이스 연결, 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:
"""Create and return a new database connection."""
return pymysql.connect(**db_config)
pymysql 라이브러리는 MySQL 데이터베이스에 연결하는 데 사용됩니다. 이 라이브러리를 사용하면 Python 애플리케이션이 간단한 API 를 사용하여 MySQL 데이터베이스와 상호 작용할 수 있습니다.
db_config 딕셔너리에는 호스트, 사용자, 비밀번호 및 데이터베이스 이름과 같은 데이터베이스 연결 매개변수가 포함되어 있습니다. 이는 더 나은 보안과 모듈성을 위해 별도의 config 모듈에서 가져옵니다. 구성 설정을 별도로 유지하면 기본 코드베이스를 수정하지 않고도 쉽게 조정할 수 있습니다.
get_db_connection() 함수는 pymysql.connect(**db_config) 함수를 사용하여 데이터베이스에 대한 새 연결을 생성하고 반환합니다. **db_config 구문은 딕셔너리를 키워드 인수로 언팩하는 데 사용됩니다.
데이터베이스 작동 함수
데이터베이스 연결을 설정한 후 다음 단계는 데이터베이스에서 작업을 수행하는 함수를 만드는 것입니다. 여기에는 주어진 짧은 URL 에 대한 데이터 나열과 브라우저 및 플랫폼 사용량에 따라 카운터 업데이트가 포함됩니다.
utils.py에 다음 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))
list_data(shorty_url) 함수는 주어진 짧은 URL(shorty_url) 에 대해 WEB_URL 테이블에서 다양한 정보를 검색하도록 설계되었습니다. 데이터베이스에 연결하고 네 개의 SQL 쿼리를 실행하여 원래 URL, 관련 태그, 액세스 카운터, 브라우저 및 플랫폼 분석을 가져옵니다. 각 쿼리는 별도로 실행되고 결과가 가져와 반환됩니다.
update_counters(cursor, short_url, browser_dict, platform_dict) 함수는 데이터베이스에서 주어진 짧은 URL 에 대한 액세스 카운터, 브라우저 및 플랫폼 카운트를 업데이트합니다. 이 함수는 데이터베이스 커서, 짧은 URL, 각 브라우저 및 플랫폼에 대한 카운트를 포함하는 두 개의 딕셔너리를 인수로 사용합니다. 제공된 데이터를 기반으로 짧은 URL 에 대한 카운터를 증가시키기 위해 UPDATE SQL 문을 구성합니다. 이 함수는 브라우저 및 플랫폼 정보가 이 함수를 호출하기 전에 결정되었고, 이 정보가 WEB_URL 테이블의 열에 해당하는 키가 있는 딕셔너리 (browser_dict 및 platform_dict) 로 전달된다고 가정합니다.
이 설정은 Flask 및 MySQL 을 사용하는 웹 애플리케이션의 일반적인 패턴으로, 일반적인 데이터베이스 작업에 대한 유틸리티 함수가 정의됩니다. 그런 다음 이러한 함수를 애플리케이션 전체에서 가져와 사용하여 데이터베이스와 상호 작용하여 직접적인 데이터베이스 액세스 및 SQL 쿼리를 기본 애플리케이션 로직에서 추상화할 수 있습니다.