-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathreload_category.py
More file actions
63 lines (51 loc) · 1.75 KB
/
Copy pathreload_category.py
File metadata and controls
63 lines (51 loc) · 1.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import mysql.connector
import re
import json
# =============================
# CONFIG LADEN
# =============================
with open("config.json", "r") as f:
config = json.load(f)
DB_CONFIG = config["DB_CONFIG"]
# =============================
# DB KONFIGURATION
# =============================
DB_CONFIG = config["DB_CONFIG"]
# =============================
# HILFSFUNKTIONEN
# =============================
def normalize_text(text):
"""Text bereinigen: alle Leerzeichen, Tabs, Zeilenumbrüche -> 1 Leerzeichen"""
if not text:
return ""
return " ".join(text.split())
def get_kategorie(text, kat_map):
"""Kategorie anhand der Schlüsselwörter bestimmen"""
text_lower = text.lower()
for key, kat in kat_map.items():
pattern = r'\b' + re.escape(key.lower()) + r'\b'
if re.search(pattern, text_lower):
return kat
return "Sonstiges"
# =============================
# DB VERBINDUNG
# =============================
db = mysql.connector.connect(**DB_CONFIG)
cursor = db.cursor()
# Kategorien aus keyword_category-Tabelle laden
cursor.execute("SELECT schluesselwort, kategorie FROM keyword_category")
kat_map = dict(cursor.fetchall())
# Alle Buchungen laden
cursor.execute("SELECT id, beschreibung FROM buchungen")
buchungen = cursor.fetchall()
update_count = 0
for b_id, beschreibung in buchungen:
beschreibung_norm = normalize_text(beschreibung)
kategorie = get_kategorie(beschreibung_norm, kat_map)
# Update durchführen
cursor.execute("UPDATE buchungen SET kategorie=%s WHERE id=%s AND manually_edit IS NULL OR manually_edit=0", (kategorie, b_id))
update_count += 1
db.commit()
cursor.close()
db.close()
print(f"✅ Kategorieabgleich abgeschlossen: {update_count} Buchungen aktualisiert.")