avatar
Untitled

Guest 267 9th Jul, 2024

MARKUP 4.06 KB
                                           
                         import psycopg2
from datetime import datetime

# Konfiguracja połączenia z bazą danych
conn = psycopg2.connect(
    dbname="nazwa_bazy_danych",
    user="uzytkownik",
    password="haslo",
    host="host",
    port="port"
)

# Flaga DEBUG
DEBUG = True

# Plik do logowania w trybie DEBUG
debug_log_file = 'debug_log.txt'

# Funkcja do logowania w trybie DEBUG
def log_debug(message):
    if DEBUG:
        with open(debug_log_file, 'a') as file:
            file.write(message + '\n')

# Funkcja do aktualizacji klauzuli
def update_clause(service, paywayid, language):
    try:
        cur = conn.cursor()

        # Zapytanie do pobrania poprzedniej klauzuli
        cur.execute("""
            SELECT clause_id, html, mobilehtml
            FROM tabela
            WHERE service = %s AND paywayid = %s AND language = %s
            ORDER BY lastmodified DESC
            LIMIT 1 OFFSET 1
        """, (service, paywayid, language))

        previous_clause = cur.fetchone()

        if previous_clause is None:
            log_debug(f"Brak poprzedniej klauzuli dla serwisu {service}, paywayid {paywayid} i języka {language}.")
            return

        prev_clause_id, html, mobilehtml = previous_clause

        log_debug(f"Pobrano poprzednią klauzulę: clause_id={prev_clause_id}, service={service}, paywayid={paywayid}, language={language}")

        # Zapytanie do pobrania najnowszej klauzuli
        cur.execute("""
            SELECT clause_id
            FROM tabela
            WHERE service = %s AND paywayid = %s AND language = %s
            ORDER BY lastmodified DESC
            LIMIT 1
        """, (service, paywayid, language))

        latest_clause = cur.fetchone()

        if latest_clause is None:
            log_debug(f"Brak najnowszej klauzuli dla serwisu {service}, paywayid {paywayid} i języka {language}.")
            return

        latest_clause_id = latest_clause[0]

        log_debug(f"Pobrano najnowszą klauzulę: clause_id={latest_clause_id}, service={service}, paywayid={paywayid}, language={language}")

        if not DEBUG:
            # Aktualizacja najnowszej klauzuli
            cur.execute("""
                UPDATE tabela
                SET html = %s, mobilehtml = %s, lastmodified = %s
                WHERE clause_id = %s
            """, (html, mobilehtml, datetime.now(), latest_clause_id))

            conn.commit()
            log_debug(f"Zaktualizowano klauzulę: clause_id={latest_clause_id}, service={service}, paywayid={paywayid}, language={language}")
        else:
            log_debug(f"Tryb debug - nie zapisano zmian do bazy danych dla clause_id={latest_clause_id}, service={service}, paywayid={paywayid}, language={language}")
    except Exception as e:
        log_debug(f"Error: {e}")
        conn.rollback()
    finally:
        cur.close()

# Funkcja do pobrania unikalnych wartości paywayid dla danego serwisu i języka
def get_paywayids(service, language):
    cur = conn.cursor()
    cur.execute("""
        SELECT DISTINCT paywayid
        FROM tabela
        WHERE service = %s AND language = %s
    """, (service, language))
    paywayids = [row[0] for row in cur.fetchall()]
    cur.close()
    return paywayids

# Lista serwisów i języków na początku skryptu
services = ['service1', 'service2']  # Dodaj więcej serwisów jeśli potrzeba
languages = ['pl', 'en']  # Dodaj więcej języków jeśli potrzeba

# Iteracja po serwisach i językach
for service in services:
    for language in languages:
        paywayids = get_paywayids(service, language)
        for paywayid in paywayids:
            update_clause(service, paywayid, language)

# Zamknięcie połączenia z bazą danych
conn.close()
                      
                                       
To share this paste please copy this url and send to your friends
RAW Paste Data
Ta strona używa plików cookie w celu usprawnienia i ułatwienia dostępu do serwisu oraz prowadzenia danych statystycznych. Dalsze korzystanie z tej witryny oznacza akceptację tego stanu rzeczy.
Wykorzystywanie plików Cookie
Jak wyłączyć cookies?
ROZUMIEM